说在前面
🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。
题目描述
设计一个类 Calculator 。该类应提供加法、减法、乘法、除法和乘方等数学运算功能。同时,它还应支持连续操作的方法链式调用。Calculator 类的构造函数应接受一个数字作为 result 的初始值。
你的 Calculator 类应包含以下方法:
- add- 将给定的数字- value与- result相加,并返回更新后的- 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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『
前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。