满足以下两个条件即为旋转数字
1,每个位有0,1,2,5,6,8,9中的其中一个
2,存在至少一个2,5,6,9
逆向思维便是
1,若发现其中一位有3,4,7中任意一个,则不是旋转数字
2,若每个位都是0,1,8,则不是旋转数字
代码如下所示
class Solution {
public:
int rotatedDigits(int n) {
int cnt = 0;
int flag = 0;
for(int i=1; i<n+1; i++){
flag = judgeRoNum(i);
if(flag) cnt++;
}
return cnt;
}
int judgeRoNum(int n)/*为1代表正确 为0代表不是旋转数字*/
{
int num = 0;/*定义位数*/
int p = n;
int mod = 0;
int cnt = 0;
do{
num ++;
p = p / 10;
}while(p);
for(int i=0; i<num; i++){
mod = n/(int)pow(10,i)%10;
if(mod==3 || mod==4 || mod==7) return 0;
if(mod == 1||mod ==0|| mod ==8)cnt++;
}
if(cnt == num) return 0;
return 1;
}
};