题目描述:
题解:动态规划
1.将输入num从int型转为str snum,dpres保存结果,dp[i]表示snum[0:i-1]有多少种组合方式。
dp[0]=0,dp[1]=0(对应snum[0]一个字符,只有一种方法),要注意dpres的下标比snum大1。
2.对snum的第i-1个字符进行判断:
如果snum[i-2]+snum[i-1]<26并且snum[i-2]不为0(避免06 05这样不合法的情况),则dpres[i]=dpres[i-1]+dpres[i-2],因为第i-1个字符有自己单独翻译为一个字母以及和前面一个字符一起翻译两种选择。
如果不满足以上条件,说明snum[i-1]只有单独翻译一个选项,dpres[i]=dpres[i-1]
class Solution(object): def translateNum(self, num): dpres = [] dpres.append(1) dpres.append(1) snum = str(num) if len(snum)<=1: return 1 for i in range(2,len(snum)+1): if snum[i-2]+snum[i-1]<"26" and snum[i-2]!='0': dpres.append(dpres[i-1]+dpres[i-2]) else: dpres.append(dpres[i-1]) return dpres[len(snum)]