class Solution {
public:
int rotatedDigits(int N) {
int count = 0;
int dp[N+1];
dp[0] = 1;
for(int i = 1; i <= N; ++i){
if(i <= 9){
dp[i] = state(i);
if(dp[i] == 2)
count++;
}
else{
int state1 = dp[i/10];
int state2 = dp[i%10];
if(state1 == 0 || state2 == 0)
dp[i] = 0;
else if(state1 == 1 && state2 ==1)
dp[i] = 1;
else{
dp[i] = 2;
count++;
}
}
}
return count;
}
int state(int k){
if(k == 3 || k == 4 || k == 7)
return 0;
else if(k == 0 || k == 1 || k == 8)
return 1;
else
return 2;
}
};
几个需要注意的问题,这里想要找的是1-N,不包括0,但是包括N本身。但是,dp中需要包含0,所以在大循环外先行填进去。
填表时,右边的总能从左边的推出来。
Runtime: 4 ms, faster than 100.00% of C++ online submissions for Rotated Digits.
Memory Usage: 8.1 MB, less than 100.00% of C++ online submissions for Rotated Digits.