原题链接:https://leetcode.cn/problems/ba-shu-zi-fan-yi-cheng-zi-fu-chuan-lcof/
给定一个数字,我们按照如下规则把它翻译为字符串:0 翻译成 “a” ,1 翻译成 “b”,……,11 翻译成 “l”,……,25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。
此题与牛客上的题类似,区别在于:输入为数字,可能需要转为字符串处理(显然数据也水得多);0代表a,不再需要考虑0无法翻译的问题。也就是说这道题要更简单一些,只需要稍作改动即可。
不过由于此题不需要考虑单个数字能否翻译的问题,代码可以进一步简化:只需要考虑两个数一组能不能翻译,如果可以则dp[i]=dp[i-1]+dp[i-2]
,否则dp[i]=dp[i-1]
,而此时容易看出,对于每一步的结果只与前两步的结果有关,因此只需要三个变量作滚动数组即可。
var translateNum = function (num) {
const _num = num.toString();
let p = 1;
let q = 1;
let r = 1;
for (let i = 1; i < _num.length; i++) {
// 可以组合两位
if (
10 <= parseInt(_num[i - 1] + _num[i]) &&
parseInt(_num[i - 1] + _num[i]) <= 25
)
r = p + q;
p = q;
q = r;
}
return r;
};
本文作者:TTQ
本文链接:https://blog.ponder.fun/archives/153.html
最后修改时间:2022-04-25 18:06:20
本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!