价格减免

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

说在前面

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

问题描述

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

  • 例如 "$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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。
目录
相关文章
|
6月前
|
存储 弹性计算 人工智能
2024年3月阿里云服务器优惠活动「开年采购」可领百万采购礼包
2024年3月阿里云服务器优惠活动「开年采购」可领百万采购礼包,99计划云服务器99元一年起、免费领取上云扶持优惠券,不只是云服务器、云数据库、存储、云电脑、域名等均有活动,阿里云百科整理阿里云开年采购上云无忧活动入口、优惠价格表和优惠券领取详细说明
|
4月前
|
弹性计算 小程序
阿里云服务器多少钱一年?学生价格免费不要钱,可领300元无门槛抵扣金
阿里云学生服务器2024年提供7个月免费使用,含2核CPU、2G内存、1M带宽及独立IP。完成学生认证获首月免费,后续任务可续6个月。另可领取300元无门槛代金券用于购买ECS或轻量应用服务器。适用于中国大陆学信网在籍学生。
537 11
|
存储 安全 Cloud Native
阿里云推出创业者计划介绍,加入计划可获得最低3500元,最高100万抵扣金
阿里云创业者计划是面向中小企业推出的一项扶持计划,致力于为中小企业构建智能时代的核心竞争力,同时聚合众多知名投资机构、加速器、孵化器和大企业创新力量,向中小企业提供全方位的赋能与服务。成功加入计划后,阿里云将提供最低3500元、最高100万元的上云抵扣金,让中小企业享受免费的云资源和技术服务,助力初创企业开启智能时代创业新范式。
阿里云推出创业者计划介绍,加入计划可获得最低3500元,最高100万抵扣金
|
6月前
|
存储 弹性计算 人工智能
史上最大优惠!阿里云宣布全线降价99元一年,新老客户同享
史上最大优惠!阿里云宣布全线降价99元一年,新老客户同享,99计划云服务器99元一年起,2核4G5M带宽199元一年,续费不涨价,轻量应用服务器2核2G3M带宽61元一年、2核4G4M带宽165元一年,4核16G10M服务器26元1个月、149元半年,8核32G服务器90元1个月、271元3个月
|
6月前
|
弹性计算 NoSQL 关系型数据库
阿里云能处,这小子真降价啊, 老用户可享续费退差价补贴!
阿里云能处,这小子真降价啊, 老用户可享续费退差价补贴!
【云大使专享】爆款产品小眯眼,大使推广专享价格100元/台(长期),卖一台返30元!
阿里云智能摄像头小眯眼云大使专属推广链接1.性能全“芯”升级,保驾护航,功能超强大,安全提升不止一点,提柔光抑强光,智能夜视,降噪音双向对讲,360度云台旋转,wifi手机互联,1080p超高清画质,手机远程,移动侦测,兼容H.264。
9285 0
阿里云商标注册价格和费用
阿里云商标注册共分为三种价格(国家商标局的价格为300元)1.自助注册申请300元,这是商标局的价格,阿里云不收取任何费用,300元的费用,全部是商标局收取的。该活动是阿里云提供的公益性服务,但不排除日后会取消该优惠活动。
7834 0
贷款买车划算还是全款买车划算?为什么?
作者:戴杰磊链接:https://www.zhihu.com/question/36713858/answer/108467199来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1701 0