题目描述
题解
动态规划
一开始想通过寻找规律或者回溯法来遍历所有可能的情况, 但是都很复杂. 然后发现每增加一位数, 所得出的结果与之前的状态有着固定的转换关系, 所以果断使用动态规划来做!
*状态定义: *dp[i]
表示使用所给整数的从左数1到i
个数字有多少种不同的翻译.
*状态转移: * 很容易找出不同状态间的转移方程. 设已知dp[i-1]=3
, 如何得到dp[i]
? 首先, 无论输入整数的第i
位是什么数字, 它所代表的字母都可以单独挂接在dp[i-1]
的所有翻译结果后面, 如果输入整数的i-1
位与第i
位所组成的两位数小于26, 那么可以挂接在dp[i-2]
的所有翻译结果后面, 所以状态转移方程为:
1 | dp[i] = dp[i - 1]; |
*输出: * dp[nums的位数]
1 | public int translateNum(int num) { |