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

目录
相关文章
9、阿里巴巴矢量图库icon-font的运用
前言:今天说下在项目中的使用图标库 GitHub:https://github.com/Ewall1106/mall 一、新建图标项目 1、打开阿里巴巴矢量图库这个网站,进入图标管理中,在里面新建一个项目 iconfont官网 2、然后...
11007 106
|
机器学习/深度学习 人工智能
OmniCam:浙大联合上海交大推出多模态视频生成框架,虚拟导演打造百万级影视运镜
OmniCam是由浙江大学与上海交通大学联合研发的多模态视频生成框架,通过LLM与视频扩散模型结合实现高质量视频生成,支持文本、轨迹和图像等多种输入模态。
404 1
OmniCam:浙大联合上海交大推出多模态视频生成框架,虚拟导演打造百万级影视运镜
PyQt5 技术篇-QTableWidget表格组件指定行的隐藏与显示控制实例演示,设置表格指定列的列宽方法
PyQt5 技术篇-QTableWidget表格组件指定行的隐藏与显示控制实例演示,设置表格指定列的列宽方法
1040 0
PyQt5 技术篇-QTableWidget表格组件指定行的隐藏与显示控制实例演示,设置表格指定列的列宽方法
|
机器学习/深度学习 人工智能 编译器
本地化部署DeepSeek-R1蒸馏大模型:基于飞桨PaddleNLP 3.0的实战指南
本文基于飞桨框架3.0,详细介绍了在Docker环境下部署DeepSeek-R1-Distill-Llama-8B蒸馏模型的全流程。飞桨3.0通过动静统一自动并行、训推一体设计等特性,显著优化大模型的推理性能与资源利用效率。实战中,借助INT8量化和自动化工具,模型在8卡A100上仅需60GB显存即可运行,推理耗时约2.8-3.2秒,吞吐率达10-12 tokens/s。本文为国产大模型的高效本地部署提供了工程参考,适配多场景需求。
690 2
本地化部署DeepSeek-R1蒸馏大模型:基于飞桨PaddleNLP 3.0的实战指南
|
机器学习/深度学习 存储 设计模式
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
本文探讨了数据基础设施设计中常见的一个问题:数据仓库或数据湖仓中的表格缺乏构建高性能机器学习模型所需的历史记录,导致模型性能受限。为解决这一问题,文章介绍了缓慢变化维度(SCD)技术,特别是Type II类型的应用。通过SCD,可以有效追踪维度表的历史变更,确保模型训练数据包含完整的时序信息,从而提升预测准确性。文章还从数据工程师、数据科学家和产品经理的不同视角提供了实施建议,强调历史数据追踪对提升模型性能和业务洞察的重要性,并建议采用渐进式策略逐步引入SCD设计模式。
506 8
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
|
12月前
|
存储 数据采集 监控
RFID仓库进出入盘点
RFID(射频识别)技术在仓库管理中显著提升效率与准确性。入库时,通过批量读取标签信息,快速完成货物识别、信息核对及库位分配;出库环节实现订单快速处理、防错纠错和实时库存更新;盘点管理方面,RFID支持快速全面盘点和动态盘点,减少人工成本与错误率。该技术具备高效准确、实时监控、降低成本和可追溯性强等优势,助力仓储管理智能化升级。
|
存储 缓存 监控
社交软件红包技术解密(四):微信红包系统是如何应对高并发的
本文将为读者介绍微信百亿级别红包背后的高并发设计实践,内容包括微信红包系统的技术难点、解决高并发问题通常使用的方案,以及微信红包系统的所采用高并发解决方案。
427 13
|
人工智能 缓存 Kubernetes
Kubernetes在AI/大数据领域的 最新进展与大规模实践
根据在[CNCC 2022开源分布式云原生系统技术发展](https://ccf.org.cn/cncc2022/schedule_d_4075)论坛的演讲整理。 ![](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/neweditor/08cde176-d1d3-49ae-a1f7-cc025d3f06f3.png) 在云计算技术快速发展的过
2703 73
Kubernetes在AI/大数据领域的最新进展与大规模实践
|
存储 安全 物联网
eSIM时代的快递员 - RSP(Remote SIM Provisioning)平台
随着苹果发布eSIM only的iphone,eSIM取代SIM的趋势愈发明显。产业更新的同时,也带来了新的标准与新的组件
|
存储 负载均衡 数据可视化
[典藏版]深入理解Golang协程调度GPM模型
《深入理解Golang协程调度器GPM模型》介绍了Golang中调度器的由来,以及如何演进到GPM模型的设计,其中包含一个Go协程在启动过程中如何运行和加载GPM模型的细节动作,也包括GPM模型的可视化编程和调试分析。最后形象介绍GPM模型的各个触发条件及运作的场景。
929 1
[典藏版]深入理解Golang协程调度GPM模型

热门文章

最新文章

下一篇
开通oss服务