題目地址:
https://leetcode.com/problems/rotated-digits/
給定一個正整數,如果其每一位旋轉後可以得到一個新的合法數字,並且和自己不一樣,稱其爲”好數“。規定旋轉後分別稱爲。給定一個正整數,問中有多少個好數。
如果這個數有一位是那麼它肯定不是好數。否則的話,說明這個數旋轉一下是合法數字,只需要含一位即可。代碼如下:
public class Solution {
public int rotatedDigits(int N) {
int res = 0;
for (int i = 1; i <= N; i++) {
if (check(i)) {
res++;
}
}
return res;
}
private boolean check(int n) {
// 標記n各位數字是否存在2,5,6,9
boolean found = false;
while (n != 0) {
// 取出最後一位
int last = n % 10;
// 如果發現了3,4,7則直接返回false
if (last == 3 || last == 4 || last == 7) {
return false;
}
// 否則尋找是否存在2,5,6,9,如果存在則標記一下
if (last == 2 || last == 5 || last == 6 || last == 9) {
found = true;
}
// 將n最後一位除掉
n /= 10;
}
// 如果之前沒返回false,說明n是可以旋轉的。那麼只要發現了2,5,6,9就說明是好數,否則說明不是
return found;
}
}
時間複雜度(check需要花費,一共要check個數),空間。