1. 程式人生 > >【一次過】Lintcode 1028. 旋轉的數位

【一次過】Lintcode 1028. 旋轉的數位

X是一個好數當且僅當單獨旋轉每一個數位180度之後,能夠得到一個合法的不同於X的數。每一個數位必須被旋轉 - 我們不能選擇不管它。

如果每一個數位在旋轉之後仍然是一個數位,那麼這個數字是合法的。0,1和8旋轉保持不變; 2和5旋轉後互相變換; 6和9旋轉後互相變換,其餘數字旋轉後不會變成任何數字所以是不合法的。

現在給定一個正數 N,多少1 到 N 之間的數X是好的?

樣例

樣例:

輸入: 10
輸出: 4
解釋:
在[1, 10]之記憶體在4個好數:2, 5, 6, 9.
注意1和10不是好數,因為它們在旋轉之後沒有變化。

注意事項

  • N 會在範圍 [1, 10000]內。

解題思路:

按照題目要求直接寫即可,如下:

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
        int nums = 0;
        
        for(int i=1 ; i<=N ; i++){
            if(isGoodDigit(i))
                nums++;
        }
        
        return nums;
    }
    
    private boolean isGoodDigit(Integer n){
        char[] cc = n.toString().toCharArray();
        
        int sameTimes = 0; //計算此數字中,0,1,8出現的次數
        for(char c : cc){
            if(c=='0' || c=='1' || c=='8'){
                sameTimes++;
            }else if(c=='2' || c=='5' || c=='6' || c=='9'){
                continue;
            }else{
                return false;
            }
        }
        
        if(sameTimes == cc.length)//若旋轉後沒有變化(0,1,8出現的次數==此數的長度),則為false
            return false;
        else    
            return true;
    }
}