剑指 Offer 46. 把数字翻译成字符串
dp三步走:
1.状态定义
dp[i]表示到第i位能形成的方案数量(从1开始)
2.状态转移方程
当第i-1位,i位组合起来能被翻译:dp[i] = dp[i - 1] + dp[i - 2]
不能被连起来翻译:dp[i] = dp[i - 1] //指加上了这一位,方案数量没有改变
3.边界处理
同注释
剑指 Offer 46. 把数字翻译成字符串
class Solution { public int translateNum(int num) { String s = String.valueOf(num); int[] dp = new int[s.length() + 1]; //为什么dp[0]是1 //因为当(这是个假如情况)第一、二位组成的数字>=10&&<=25 //dp[2]=2,而dp[1]显然为1,推出dp[0]=1 dp[0] = 1; dp[1] = 1; for(int i = 2; i <= s.length(); i++){ String tmp = s.substring(i - 2, i); dp[i] = tmp.compareTo("10") >= 0 && tmp.compareTo("25") <= 0 ? dp[i - 1] + dp[i - 2] : dp[i - 1]; } return dp[s.length()]; } }