剑指Offer46.把数字翻译成字符串
题目链接:把数字翻译成字符串
思路:从数字高位向低位进行遍历,假设遍历到第i个位置,那么开始判读可不可以和前面的数字进行组合:当不和前面的数字组合时,该位数字自己表示一个字符;当和前面数字组合时,先判断能不能组合,如01、31、26、40,这些只有一种翻译方式,也就是说只有和前面组合时位于[10,25]这个范围内才能进行翻译。所以有,当不能组合时\(dp[i] = dp[i-1]\),当可以组合时\(dp[i]=dp[i-1]+dp[i-2]\)。可以看到结果只用到两个变量,所以不需要使用数组。
代码:
class Solution {
public int translateNum(int num) {
char[] n = String.valueOf(num).toCharArray();
int res = 1;
for(int i=1, pre1=1, pre2=1; i<n.length; i++){
if(n[i-1]=='0' || n[i-1]>'2' ||
n[i-1]=='2' && n[i]>'5' ||
n[i] == '0' && n[i-1]!='1' && n[i-1]!='2'){
res = pre1;
}else{
res = pre1 + pre2;
}
pre2 = pre1;
pre1 = res;
}
return res;
}
}
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:35 MB, 在所有 Java 提交中击败了93.79%的用户