【LeetCode】1056-易混淆數

易混淆數

給定一個數字 N,當它知足如下條件的時候返回 true:把原數字旋轉180°之後獲得新的數字。如 0, 1, 6, 8, 9 旋轉 180° 之後,獲得了新的數字 0, 1, 9, 8, 6 。2, 3, 4, 5, 7 旋轉 180° 後,獲得的不是數字。易混淆數字 (confusing number) 就是一個數字旋轉180°之後,獲得和原來不一樣的數字,且新數字的每一位都是有效的。java

示例 1:
輸入:89
輸出:true
解釋:
把 89 旋轉 180° 之後獲得 68,68 是有效數字且 68!=89 。
示例 2:
輸入:25
輸出:false
解釋:
把 25 旋轉 180° 之後獲得的不是數字。spring


分析

1. 已知0, 1, 6, 8, 9 旋轉 180° 之後,獲得新的數字 0, 1, 9, 8, 6。 那麼給定一個整數,我能夠先分析它裏面每位數字旋轉狀況。如619,將每位數字用旋轉後新的數字代替就成了916,可是按總體來旋轉180°應該是619,因此咱們還須要將916反轉。經過分析,若是採用java來實現的話,能夠先將整數N轉化成字符串str,用hashmap來存儲0, 1, 6, 8, 9以及它們對應旋轉以後的值,在這裏咱們還須要建立一個StringBuilder對象tmp來接收旋轉後的值並將它們組合成字符串,從字符串str中依次取出每位數字放在hashmap中尋找,若是找到了就將結果鏈接到tmp中(至於旋轉以後不是數字的狀況我將在後面討論),直到遍歷完str,咱們就獲得了每位數字原地旋轉的狀況,接着用StringBuilder類中的reverse方法能夠將字符串反轉,用toString方法將其轉化成String類再作相應判斷。部分代碼以下:app

String str = Integer.toString(N);

Map<Character, Character> map=new HashMap<>();
map.put('0','0');
map.put('1','1');
map.put('6','9');
map.put('8','8');
map.put('9','6');

StringBuilder tmp =new StringBuilder();

for(int i = 0; i < str.length(); i++){
    tmp.append(map.get(str.charAt(i)));
}

2. 2,3, 4, 5, 7 旋轉 180° 後,獲得的不是數字。 很顯然,若是給定的整數N中存在這些數,那麼N必定不是易混淆數,直接返回false。部分代碼以下:ui

char[] ch = {'2','3','4','5','7'};
    for(char c : ch){
        if(str.indexOf(c) != -1)
            return false;
    }

3. 易淆數字 (confusing number) 就是一個數字旋轉180°之後,獲得和原來不一樣的數字,且新數字的每一位都是有效的。 這裏說明整數N旋轉180°之後不能仍爲N, 如我在1中提到的619,旋轉以後仍爲619,那麼它並非易混淆數。部分代碼以下:code

if(tmp.reverse().toString().equals(str))
            return false;
        else
            return true;

總結

對於這個問題,若是咱們從總體考慮的話有點無從下手,因此採起化整爲零,再化零爲整的策略就容易的多,下面附上所有的代碼:對象

public static boolean confusingNumber(int N) {
        String str = Integer.toString(N);

        char[] ch = {'2','3','4','5','7'};
        for(char c : ch){
            if(str.indexOf(c) != -1)
                return false;
        }

        Map<Character, Character> map=new HashMap<>();
        map.put('0','0');
        map.put('1','1');
        map.put('6','9');
        map.put('8','8');
        map.put('9','6');

        StringBuilder tmp =new StringBuilder();
        for(int i = 0; i < str.length(); i++){
            tmp.append(map.get(str.charAt(i)));
        }

        if(tmp.reverse().toString().equals(str))
            return false;
        else
            return true;
}
相關文章
相關標籤/搜索