价格减免

简介: 🎈每天进行一道算法题目练习,今天的题目是“价格减免”。

说在前面

🎈每天进行一道算法题目练习,今天的题目是“价格减免”。

问题描述

句子 是由若干个单词组成的字符串,单词之间用单个空格分隔,其中每个单词可以包含数字、小写字母、和美元符号 '$' 。如果单词的形式为美元符号后跟着一个非负实数,那么这个单词就表示一个价格。

  • 例如 "$100""$23" 和 "$6.75" 表示价格,而 "100""$" 和 "2$3" 不是。

注意: 本题输入中的价格均为整数。

给你一个字符串 sentence  和一个整数 discount 。对于每个表示价格的单词,都在价格的基础上减免 discount% ,并 更新 该单词到句子中。所有更新后的价格应该表示为一个 恰好保留小数点后两位 的数字。

返回表示修改后句子的字符串。

 

示例 1:

输入: sentence = "there are $1 $2 and 5$ candies in the shop", discount = 50
输出: "there are $0.50 $1.00 and 5$ candies in the shop"
解释:
表示价格的单词是 "$1" 和 "$2" 。 
- "$1" 减免 50% 为 "$0.50" ,所以 "$1" 替换为 "$0.50" 。
- "$2" 减免 50% 为 "$1" ,所以 "$1" 替换为 "$1.00" 。

示例 2:

输入: sentence = "1 2 $3 4 $5 $6 7 8$ $9 $10$", discount = 100
输出: "1 2 $0.00 4 $0.00 $0.00 7 8$ $0.00 $10$"
解释:
任何价格减免 100% 都会得到 0 。
表示价格的单词分别是 "$3"、"$5"、"$6" 和 "$9"。
每个单词都替换为 "$0.00"。

 
提示:

  • 1 <= sentence.length <= 105
  • sentence 由小写英文字母、数字、' ' 和 '$' 组成
  • sentence 不含前导和尾随空格
  • sentence 的所有单词都用单个空格分隔
  • 所有价格都是  整数且不含前导零
  • 所有价格 最多 为  10 位数字
  • 0 <= discount <= 100

思路分析

首先我们应该要先理解一下题目的意思,题目给出的两个参数分别为:

sentence:由若干个单词组成的字符串,单词之间用单个空格分隔,其中每个单词可以包含数字、小写字母、和美元符号  '$' 。如果单词的形式为美元符号后跟着一个非负实数,那么这个单词就表示一个价格。

discount:对于每个表示价格的单词,都在价格的基础上减免 discount%

所以我们只需要找出sentence中表示价格的单词,将其减免 discount%即可,具体我们可以这样做:

  • 1、找出表示价格的单词

表示价格的单词的特点是美元符号后跟着一个非负实数,所以我们需要确保第一个字符是'$'且后部分单词为非负实数即可说明这个单词是表示一个价格

sentence[i][0] == "$" && !isNaN(parseFloat(num)) && parseFloat(num) == num
  • 2、计算折扣

这里要注意的是,题目描述的是在价格的基础上减免 discount%而不是打折为discount%

num = ((parseFloat(num) * (100 - discount)) / 100).toFixed(2);
res.push("$" + num);
  • 3、将计算完折扣的字符重新组合
return res.join(" ");

完整代码如下:

AC代码

/**
 * @param {string} sentence
 * @param {number} discount
 * @return {string}
 */
var discountPrices = function (sentence, discount) {
  let res = [];
  sentence = sentence.split(" ");
  for (let i = 0; i < sentence.length; i++) {
    let num = sentence[i].slice(1);
    if (sentence[i][0] == "$" && !isNaN(parseFloat(num)) && parseFloat(num) == num) {
        num = ((parseFloat(num) * (100 - discount)) / 100).toFixed(2);
        res.push("$" + num);
    } else {
      res.push(sentence[i]);
    }
  }
  return res.join(" ");
};

说在后面

🎉这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。
目录
相关文章
|
2月前
|
存储 弹性计算 人工智能
史上最大优惠!阿里云宣布全线降价99元一年,新老客户同享
史上最大优惠!阿里云宣布全线降价99元一年,新老客户同享,99计划云服务器99元一年起,2核4G5M带宽199元一年,续费不涨价,轻量应用服务器2核2G3M带宽61元一年、2核4G4M带宽165元一年,4核16G10M服务器26元1个月、149元半年,8核32G服务器90元1个月、271元3个月
|
2月前
|
弹性计算 NoSQL 关系型数据库
阿里云能处,这小子真降价啊, 老用户可享续费退差价补贴!
阿里云能处,这小子真降价啊, 老用户可享续费退差价补贴!
|
8月前
|
存储 安全 Cloud Native
阿里云推出创业者计划介绍,加入计划可获得最低3500元,最高100万抵扣金
阿里云创业者计划是面向中小企业推出的一项扶持计划,致力于为中小企业构建智能时代的核心竞争力,同时聚合众多知名投资机构、加速器、孵化器和大企业创新力量,向中小企业提供全方位的赋能与服务。成功加入计划后,阿里云将提供最低3500元、最高100万元的上云抵扣金,让中小企业享受免费的云资源和技术服务,助力初创企业开启智能时代创业新范式。
阿里云推出创业者计划介绍,加入计划可获得最低3500元,最高100万抵扣金
|
9月前
阿里云新品代金券,江苏省上云补贴,满减券30万减5万,补贴券最高5000元
江苏省千万补贴扶持中小企业上云,新增上云满减券和上云补贴券,上云满减券最高减5万,上云补贴券最高5000元,新推出的上云满减券和上云补贴券均为江苏省政府发布的千万补贴扶持中小企业上云福利。
250 0
阿里云新品代金券,江苏省上云补贴,满减券30万减5万,补贴券最高5000元
【云大使专享】爆款产品小眯眼,大使推广专享价格100元/台(长期),卖一台返30元!
阿里云智能摄像头小眯眼云大使专属推广链接1.性能全“芯”升级,保驾护航,功能超强大,安全提升不止一点,提柔光抑强光,智能夜视,降噪音双向对讲,360度云台旋转,wifi手机互联,1080p超高清画质,手机远程,移动侦测,兼容H.264。
9240 0
贷款买车划算还是全款买车划算?为什么?
作者:戴杰磊链接:https://www.zhihu.com/question/36713858/answer/108467199来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1616 0