【Leetcode】788. Rotated Digits

題目地址:

https://leetcode.com/problems/rotated-digits/

給定一個正整數,如果其每一位旋轉180°180\degree後可以得到一個新的合法數字,並且和自己不一樣,稱其爲”好數“。規定0,1,2,5,6,8,90,1,2,5,6,8,9旋轉後分別稱爲0,1,5,2,9,8,60,1,5,2,9,8,6。給定一個正整數NN,問[1,N][1,N]中有多少個好數。

如果這個數有一位是3,4,73,4,7那麼它肯定不是好數。否則的話,說明這個數旋轉一下是合法數字,只需要含一位2,5,6,92,5,6,9即可。代碼如下:

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;
    }
}

時間複雜度O(nlogn)O(n\log n)(check需要花費O(logn)O(\log n),一共要checknn個數),空間O(1)O(1)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章