考虑边界条件(鲁棒性)
class Solution {
public:
/**
* 解码
* @param nums string字符串 数字串
* @return int整型
*/
int solve(string nums) {
// dp[i] 表示长度为 i 的字符串有 多少种可能译码结果
if (nums.empty() || nums[0] == '0') {
return 0;
}
int size = nums.size();
for (int i = 1; i < size; ++i) {
if (nums[i] == '0') {
if (nums[i - 1] != '1' && nums[i - 1] != '2') {
return 0;
}
}
}
std::vector<int> dp(nums.size() + 1, 1);
// 两种译码可能才状态转移,一种情况下不变其数量(以前一位作为当前量)
for (int i = 1; i < size; ++i) {
if ((nums[i] != '0' && nums[i - 1] == '1') || (nums[i] > '0' && nums[i] < '7' && nums[i - 1] == '2')) {
dp[i + 1] = dp[i] + dp[i - 1];
} else {
dp[i + 1] = dp[i];
}
}
return dp[size];
}
};