这题有点像跳箱子(一次跳一格或者两格) 如果按照跳箱子的做法,dp[n] = dp[n-2] + dp[n-1],从后往前递归,会超时(递归时间和空间都会超); 那么可以用从前往后的动态规划: 从前往后遍历,分类讨论当前元素i: 如果i == 0,那么前一个字符必须为1或者2,此时dp[i] = dp[i - 2],否则无法译码,直接返回0; 如果i != 0,考虑i-1: 如果i - 1 == 0,那么当前i只能单独译码,则dp[i] = dp[i - 1]; 如果i - 1 != 0,那么看string(i - 1, i)是否在10~26之间,在的话dp[i] = dp[i - ...