价格减免

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

说在前面

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

问题描述

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

  • 例如 "$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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。
目录
相关文章
|
数据采集 运维 监控
|
SQL 数据库
SQL 中的 NULL 值:定义、测试和处理空数据,以及 SQL UPDATE 语句的使用
NULL 值是指字段没有值的情况。如果表中的字段是可选的,那么可以插入新记录或更新记录而不向该字段添加值。此时,该字段将保存为 NULL 值。需要注意的是,NULL 值与零值或包含空格的字段不同。具有 NULL 值的字段是在记录创建期间留空的字段。
375 0
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实战指南
【9月更文挑战第6天】在数字化时代的潮流中,后端开发作为支撑现代Web和移动应用的核心,其重要性不言而喻。本文将深入浅出地介绍如何使用Node.js及其流行的框架Express来搭建一个高效、可扩展的后端服务。通过具体的代码示例和实践技巧,我们将探索如何利用这两个强大的工具提升开发效率和应用性能。无论你是后端开发的新手还是希望提高现有项目质量的老手,这篇文章都将为你提供有价值的见解和指导。
|
9月前
|
调度 数据库
【YashanDB知识库】手动停止统计信息自动收集任务导致的性能变差
【YashanDB知识库】手动停止统计信息自动收集任务导致的性能变差
|
存储 Shell API
从头搭建一个flask鉴权系统之登陆
“ 从今天开始,准备从头开始搭建一个基于flask的鉴权系统,一点一滴,积累于生活”
从头搭建一个flask鉴权系统之登陆
|
JavaScript Java 关系型数据库
springboot+vue校园闲置物品交易网站(源码+文档)
校园闲置物品交易网站实现了以下功能: 管理员:首页、个人中心、用户管理、商品类型管理、商品信息管理、系统管理、订单管理等。 用户:首页、个人中心、商品信息管理、我的收藏管理、订单管理。 前台首页:首页、商品信息、商品资讯、个人中心、后台管理、购物车等相应操作;
|
机器学习/深度学习 编解码 人工智能
什么样才算好图——从生图模型质量度量方法看模型能力的发展(下)
什么样才算好图——从生图模型质量度量方法看模型能力的发展(下)
924 1
|
数据处理 开发者 索引
【Python】已解决:FutureWarning: The frame.append method is deprecated and will be removed from pandas in
【Python】已解决:FutureWarning: The frame.append method is deprecated and will be removed from pandas in
1214 0
|
存储 算法 Java
Python编程面试题及答案(20例)
Python编程面试题及答案(20例)
319 1