2726. 使用方法链的计算器

简介: 2726. 使用方法链的计算器

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

设计一个类 Calculator 。该类应提供加法、减法、乘法、除法和乘方等数学运算功能。同时,它还应支持连续操作的方法链式调用。Calculator 类的构造函数应接受一个数字作为 result 的初始值。

你的 Calculator 类应包含以下方法:

  • add - 将给定的数字 valueresult 相加,并返回更新后的 Calculator 对象。
  • subtract - 从 result 中减去给定的数字 value ,并返回更新后的 Calculator 对象。
  • multiply - 将 result 乘以给定的数字 value ,并返回更新后的 Calculator 对象。
  • divide - 将 result 除以给定的数字 value ,并返回更新后的 Calculator 对象。如果传入的值为 0 ,则抛出错误 "Division by zero is not allowed"
  • power - 计算 result 的幂,指数为给定的数字 value ,并返回更新后的 Calculator 对象。(result = result ^ value
  • getResult - 返回 result 的值。

结果与实际结果相差在 10^-5 范围内的解被认为是正确的。

示例 1:

输入: actions = ["Calculator", "add", "subtract", "getResult"], 
values = [10, 5, 7]
输出: 8
解释:
new Calculator(10).add(5).subtract(7).getResult() // 10 + 5 - 7 = 8

示例 2:

输入: actions = ["Calculator", "multiply", "power", "getResult"], 
values = [2, 5, 2]
输出: 100
解释:
new Calculator(2).multiply(5).power(2).getResult() // (2 * 5) ^ 2 = 100

示例 3:

输入: actions = ["Calculator", "divide", "getResult"], 
values = [20, 0]
输出: "Division by zero is not allowed"
解释:
new Calculator(20).divide(0).getResult() // 20 / 0 
由于不能除以零,因此应抛出错误。

提示:

  • actions 是一个有效的 JSON 字符串数组
  • values 是一个有效的 JSON 字符串数组
  • 2 <= actions.length <= 2 * 104
  • 1 <= values.length <= 2 * 104 - 1
  • actions[i] 是 “Calculator”, “add”, “subtract”, “multiply”, “divide”, “power”, 和 “getResult” 其中的元素
  • 第一个操作总是 “Calculator”
  • 最后一个操作总是 “getResult”

解题思路

实例可以通过不断地调用各种运算方法来不断修改其内部的值。最终结果可以通过调用 getResult() 方法得到。这个类的构造函数需要传入一个初始值。以下是各个方法的功能:

  • add(value):将当前值加上参数 value,返回一个新的 Calculator 实例。
  • subtract(value):将当前值减去参数 value,返回一个新的 Calculator 实例。
  • multiply(value):将当前值乘以参数 value,返回一个新的 Calculator 实例。
  • divide(value):将当前值除以参数 value,返回一个新的 Calculator 实例。如果 value 等于 0,则抛出错误。
  • power(value):将当前值求 value 次幂,返回一个新的 Calculator 实例。
  • getResult():返回当前的计算结果。

AC代码

class Calculator {
  /**
   * @param {number} value
   */
  constructor(value) {
    this.value = value;
  }
  /**
   * @param {number} value
   * @return {Calculator}
   */
  add(value) {
    return new Calculator(this.value + value);
  }
  /**
   * @param {number} value
   * @return {Calculator}
   */
  subtract(value) {
    return new Calculator(this.value - value);
  }
  /**
   * @param {number} value
   * @return {Calculator}
   */
  multiply(value) {
    return new Calculator(this.value * value);
  }
  /**
   * @param {number} value
   * @return {Calculator}
   */
  divide(value) {
    if (value === 0) throw "Division by zero is not allowed";
    return new Calculator(this.value / value);
  }
  /**
   * @param {number} value
   * @return {Calculator}
   */
  power(value) {
    return new Calculator(Math.pow(this.value, value));
  }
  /**
   * @return {number}
   */
  getResult() {
    return this.value;
  }
}

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
5月前
|
前端开发 Python
前端知识(十七)——入口函数和特定函数的区别
前端知识(十七)——入口函数和特定函数的区别
54 0
|
弹性计算 监控 安全
函数计算进阶-IP查询工具开发
本场景介绍如何使用函数计算服务开发一个IP查询工具。
118 0
|
2月前
|
JSON 运维 Serverless
函数计算产品使用问题之怎么使用ComfyUI功能
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
4月前
|
监控 算法 Serverless
函数计算操作报错合集之部署的pthon服务时,遇到报错,是什么原因
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
5月前
|
C++
【51单片机】添加模块代码的常见问题(图示&代码演示)
【51单片机】添加模块代码的常见问题(图示&代码演示)
|
JSON jenkins 持续交付
python接口自动化(十六)--参数关联接口后传(详解)
大家对前边的自动化新建任务之后,接着对这个新建任务操作了解之后,希望带小伙伴进一步巩固胜利的果实,夯实基础。因此再在沙场实例演练一下博客园的相关接口。我们用自动化发随笔之后,要想接着对这篇随笔操作,不用说就需 要用参数关联了,发随笔之后会有一个随笔的 id,获取到这个 id,继续操作传这个随笔 id 就可以了(博客园的登录机制已经变了,不能用账号和密码登录了,这里用 cookie 登录)
197 1
python接口自动化(十六)--参数关联接口后传(详解)
蓝桥杯之单片机学习(二十三)——对于官方驱动的函数调用,包装程序
蓝桥杯之单片机学习(二十三)——对于官方驱动的函数调用,包装程序
107 0
蓝桥杯之单片机学习(二十三)——对于官方驱动的函数调用,包装程序
|
JavaScript Java Scala
编写规则 注意事项和手册|学习笔记
快速学习编写规则 注意事项和手册。
编写规则 注意事项和手册|学习笔记
|
算法
用函数数组指针来实现计算器的功能(简易模式)(不过稍微改改也能算比较复杂的)
整个代码块并不算多难理解,有兴趣的可以看看我写的扫雷(比这稍微复杂点,但与比赛相比差远了)。它的思路很简单,就是构造一个函数指针数组,然后把4个函数放到里面去,再在想用的时候把它调用出来。
79 0
|
Java
Java初学者作业——定义一个计算器类, 实现计算器类中加、 减、 乘、 除的运算方法, 每个方法能够接收2个参数。
Java初学者作业——定义一个计算器类, 实现计算器类中加、 减、 乘、 除的运算方法, 每个方法能够接收2个参数。
623 0
Java初学者作业——定义一个计算器类, 实现计算器类中加、 减、 乘、 除的运算方法, 每个方法能够接收2个参数。