说在前面
🎈每天进行一道算法题目练习,今天的题目是“价格减免”。
问题描述
句子 是由若干个单词组成的字符串,单词之间用单个空格分隔,其中每个单词可以包含数字、小写字母、和美元符号 '$'
。如果单词的形式为美元符号后跟着一个非负实数,那么这个单词就表示一个价格。
- 例如
"$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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。