vector<string> numDecodingsList(string s) {
vector<string> dp;
vector<string> dp_pre;//一开始为空,等到for执行1次就有了
if(s.length()<=0) return dp;
if(s[0]-'0'>=1 && s[0]-'0'<=26){
dp.push_back(string(1,s[0]));//char初始化一个string,需要两个参数,char长度和char
}else return dp;//如果第一个数字是0,无法解开,返回0
for(int i=1;i<s.length();i++){// 如果当前元素在1-26内,sum+=dp[i-1];如果i-2大于等于0,且两个数字连着在1-26之内
vector<string> new_dp;
if(s[i]-'0'>=1 && s[i]-'0'<=26){
for(string j:dp){
new_dp.push_back(j+" "+string(1,s[i]));
}
}
if(stoi(s.substr(i-1,2))>=1 && stoi(s.substr(i-1,2))<=26 && s[i-1]!='0'){//不用判定两位数的第一位非0
if(i>=2){
for(string j:dp_pre){
new_dp.push_back(j+" "+s.substr(i-1,2));//dp[i-2]和当前两位数拼接
}
}else{
new_dp.push_back(s.substr(i-1,2));//当前两位数
}
}
dp_pre = dp;//dp[i-2]
dp = new_dp;//dp[i-1]
}
return dp;
}