512. Decode Ways
有一个消息包含A-Z
通过以下规则编码
'A' -> 1
'B' -> 2
...
'Z' -> 26
现在给你一个加密过后的消息,问有几种解码的方式
提示:首先合法输入f[0] = 1.遍历s从1到n-1。如果当前字符不等于0那么f[i]+=f[i-1],如果当前字符的前一个字符不为0,并且两者加起来是小于26的,那么结果还要加上法f[i-2](此时为结尾两个数字结合的情况)。
答案:
class Solution {
public:
/**
* @param s: a string, encoded message
* @return: an integer, the number of ways decoding
*/
int numDecodings(string &s) {
if (s == "" || s[0] == '0')
return 0;
int n = s.size();
vector<int> f(n, 0);
f[0] = 1;
for (int i = 1; i < n; i++) {
if (s[i] != '0')
f[i] += f[i-1];
if (s[i-1] != '0' && stoi(s.substr(i-1, 2)) <= 26)
f[i] += i == 1 ? 1 : f[i-2];
if (!f[i])
return 0;
}
return f[n-1];
}
};
513. Perfect Squares
给一个正整数 n, 请问最少多少个完全平方数(比如1,