剑指 Offer 46. 把数字翻译成字符串
思路:每个位置与的状态有两种
1: 与前一个数字组合 >= 10 && <26:
f
[
i
]
=
f
[
i
−
1
]
+
f
[
i
−
2
]
f[i] = f[i-1] + f[i-2]
f[i]=f[i−1]+f[i−2]
2: 与前一个数字无法组合时
f
[
i
]
=
f
[
i
−
1
]
f[i] = f[i-1]
f[i]=f[i−1]
class Solution {
public int translateNum(int num) {
int len = 1;
int[] arr = new int[19];
while(num>0){ // 数位处理
arr[len] = num % 10 ;
num /= 10;
len ++;
}
int[] f = new int[19];
int pre = arr[len-1];
f[len-1] = 1;
f[len] = 1;
for(int i = len - 2; i >=1; i--){
if(pre * 10 + arr[i] < 26 && pre * 10 + arr[i]>=10 ){
f[i] += f[i+2];
}
pre = arr[i];
f[i] += f[i+1];
// System.out.println(i+": " + f[i] + " "+arr[i]);
}
return f[1];
}
}