【动态规划】牛客网:把数字翻译成字符串
·
有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'。
现在给一串数字,返回有多少种可能的译码结果
输入:"12"
返回值:2种可能的译码结果(”ab” 或”l”)
其实这道题目很像爬楼梯,一次能爬一层和爬两层,只是爬的过程中增加了一些限定条件,只要将这些限定条件屡清楚则可以完全搞懂这类题目
dp[i]:表示前i个字符有多少种译码结果
dp[i]=dp[i-1](如果最后一个字符是合法编码)+dp[i-2](如果最后两个字符是合法编码)
dp[0]=1;
dp[1]=1(且nums.charat[0]!='0')
public int solve (String nums) {
// write code here
int length=nums.length();
int[] dp=new int[length+1];
dp[0]=1;
for(int i=1;i<=length;i++){
if(nums.charAt(i-1)!='0')
dp[i]+=dp[i-1];
if(i>=2&&(nums.charAt(i-2)-'0')*10+(nums.charAt(i-1)-'0')>=10&&(nums.charAt(i-2)-'0')*10+(nums.charAt(i-1)-'0')<=26)
dp[i]+=dp[i-2];
}
return dp[length];
}
更多推荐
所有评论(0)