BM69. 把数字翻译成字符串
描述
示例1
输入:
"12"
输出:
2
说明:
2种可能的译码结果(”ab” 或”l”)示例2
输入:
"31717126241541717"
输出:
192
说明:
192种可能的译码结果C++ 解法, 执行用时: 2ms, 内存消耗: 332KB, 提交时间: 2020-12-24
class Solution { public: /** * 解码 * @param nums string字符串 数字串 * @return int整型 */ int solve(string nums) { // write code here int len = nums.size(); int *dp = new int[len+1]; if (nums[0] > '0') { dp[1] = 1; } dp[0] = 1; for(int i = 1; i<len; i++) { int t1 = nums[i-1] - '0'; int t2 = nums[i] - '0'; int temp = t1*10+t2; if (t2 == 0) { if (temp>=10&&temp<=26) { dp[i+1] = dp[i]; } } else { if (temp>=10&& temp<=26) { dp[i+1] = dp[i-1]+dp[i]; } else { dp[i+1] = dp[i]; } } } return dp[len]; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 336KB, 提交时间: 2021-06-08
class Solution { public: /** * 解码 * @param nums string字符串 数字串 * @return int整型 */ int solve(string nums) { // write code here //if(nums.size()==1)return 1; long long dp[nums.size()]; dp[0]=1; if(nums[0]=='0')return 0; if(nums[0]=='1'&&nums[1]>'0'||nums[0]=='2'&&nums[1]<='6'&&nums[1]>='1')dp[1]=2; else dp[1]=dp[0]; for(size_t i=2;i<nums.size();i++){ if(nums[i]>'0'&&nums[i-1]=='1'||nums[i]>'0'&&nums[i]<='6'&&nums[i-1]=='2'){ dp[i]=dp[i-1]+dp[i-2]; } else if(nums[i]=='0'&&nums[i-1]=='1'||nums[i-1]=='2')dp[i]=dp[i-1]; else if(nums[i]=='0')return 0; else dp[i]=dp[i-1]; } return dp[nums.size()-1]; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 336KB, 提交时间: 2020-12-20
class Solution { public: /** * 解码 * @param nums string字符串 数字串 * @return int整型 */ int solve(string nums) { // write code here int len = nums.size(); if(len == 0) return 0; if(nums[0] == '0') return 0; vector<int> dp(len+1, 1); dp[1] = 1; for(int i=1; i<len; i++) { string temp = ""; if(nums[i] == '0' && nums[i-1] == '0') { //100 return 0; } if(nums[i] == '0') { dp[i+1] = dp[i]; } else if(nums[i-1] == '1' || (nums[i-1] == '2' && nums[i] <= '6')) { dp[i+1] = dp[i] + dp[i-1]; } else { dp[i+1] = dp[i]; } } return dp[len]; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 340KB, 提交时间: 2021-05-23
class Solution { public: /** * 解码 * @param nums string字符串 数字串 * @return int整型 */ int solve(string nums) { // write code here if(!nums.length()||nums[0]=='0') return 0; int nums_len=nums.length(); vector<int> dp(nums_len,0); dp[0]=1; for(int i=1;i<nums_len;i++){ if(nums[i]!='0') dp[i]=dp[i-1]; int num=(nums[i-1]-'0')*10+(nums[i]-'0'); if(num<=26&&num>=10){ if(i==1) dp[i]++; else dp[i]+=dp[i-2]; } } return dp[nums_len-1]; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 340KB, 提交时间: 2021-05-13
class Solution { public: /** * 解码 * @param nums string字符串 数字串 * @return int整型 */ int solve(string nums) { // write code here if(nums.empty()||nums=="0") return 0; int n=nums.size(); vector<int> dp(n+1,0); dp[0]=1; for(int i=1;i<n;++i) { if(nums[i]=='0') { if(nums[i-1]=='1'||nums[i-1]=='2')//10,20 { if(i==1) dp[i]=1; else dp[i]=dp[i-2]; } } else if((nums[i]>='1'&&nums[i]<='6'&&nums[i-1]=='2')||nums[i-1]=='1')//11-19,21-26 { if(i==1) dp[i]=2; else dp[i]=dp[i-2]+dp[i-1]; } else//0[1-9],>=27 dp[i]=dp[i-1]; } return dp[n-1]; } };