题解 | 把数字翻译成字符串
把数字翻译成字符串
https://www.nowcoder.com/practice/046a55e6cd274cffb88fc32dba695668
#include <vector>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 解码
* @param nums string字符串 数字串
* @return int整型
*/
int solve(string nums) {
if (nums == "0") {
return 0;
}
int len = nums.size();
vector<int> dp( len+1 ,1);//注意一般字符串的话dp[maxsize] maxsize一般是字符串的size +1 dp数组的索引i指的是对应str里第 i 个(索引为i-1)的结果。
if (nums == "10"||nums == "20") {
return 1;
}
for (int i = 1; i<len; i++) {
if (nums[i] == '0' && nums[i-1] !='1' && nums[i-1] != '2') {
return 0;
}
}
for (int i =2; i<=len; i++) {
//有单读和双读两种情况的路径
if ((nums[i-2] == '1' && nums[i-1]!= '0') || (nums[i-2] == '2' && nums[i-1]> '0' && nums[i-1] <'7')) {
dp[i] = dp[i-2] + dp[i-1];
}
else {
dp[i] = dp[i-1];
}
}
return dp[len];
}
};
//边界条件太多,还可以直接分为两种,单字符解码和双字符解码
单字符译码: dp[i] = dp[i-1]; 单字符 1-9 nums[i-1] != 0;
双字符译码: dp[i] = dp[i-2]; 双字符 10-26
第一位为 '0' 直接返回 '0'
查看23道真题和解析
