题目地址:
https://www.lintcode.com/problem/rotated-digits/description
一个数字 n n n是好数,如果将其每位翻转能得到一个合法的但与 n n n不等的数。给定 N N N,问 1 ∼ N 1\sim N 1∼N有多少个好数。
逐个判断即可。代码如下:
public class Solution {
/**
* @param N: a positive number
* @return: how many numbers X from 1 to N are good
*/
public int rotatedDigits(int N) {
// write your code here
char[] rot = {'0', '1', '5', 0, 0, '2', '9', 0, '8', '6'};
int res = 0;
for (int i = 1; i <= N; i++) {
if (check(String.valueOf(i), rot)) {
res++;
}
}
return res;
}
private boolean check(String s, char[] rot) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (rot[ch - '0'] != 0) {
sb.append(rot[ch - '0']);
} else {
return false;
}
}
return !sb.toString().equals(s);
}
}
时间复杂度 O ( N log N ) O(N\log N) O(NlogN),空间 O ( log N ) O(\log N) O(logN)。一个数 n n n的位数的量级是 O ( log n ) O(\log n) O(logn)。