[LeetCode] Strobogrammatic Number 對稱數

 

A strobogrammatic number is a number that looks the same when rotated 180 degrees (looked at upside down).html

Write a function to determine if a number is strobogrammatic. The number is represented as a string.ide

Example 1:post

Input:  "69"
Output: true

Example 2:url

Input:  "88"
Output: true

Example 3:spa

Input:  "962"
Output: false

 

這道題定義了一種對稱數,就是說一個數字旋轉180度和原來同樣,也就是倒過來看同樣,好比609,倒過來仍是609等等,知足這種條件的數字其實沒有幾個,只有0,1,8,6,9。這道題其實能夠看作求迴文數的一種特殊狀況,咱們仍是用雙指針來檢測,那麼首尾兩個數字若是相等的話,那麼只有它們是0,1,8中間的一個才行,若是它們不相等的話,必須一個是6一個是9,或者一個是9一個是6,其餘全部狀況均返回false,參見代碼以下;指針

 

解法一:code

class Solution {
public:
    bool isStrobogrammatic(string num) {
        int l = 0, r = num.size() - 1;
        while (l <= r) {
            if (num[l] == num[r]) {
                if (num[l] != '1' && num[l] != '0' && num[l] != '8'){
                    return false;
                }
            } else {
                if ((num[l] != '6' || num[r] != '9') && (num[l] != '9' || num[r] != '6')) {
                    return false;
                }
            }
            ++l; --r;
        }
        return true;
    }
};

 

因爲知足題意的數字很少,因此咱們能夠用哈希表來作,把全部符合題意的映射都存入哈希表中,而後雙指針掃描,看對應位置的兩個數字是否在哈希表裏存在映射,若不存在,返回false,遍歷完成返回true,參見代碼以下:htm

 

解法二:blog

class Solution {
public:
    bool isStrobogrammatic(string num) {
        unordered_map<char, char> m {{'0', '0'}, {'1', '1'}, {'8', '8'}, {'6', '9'}, {'9', '6'}};
        for (int i = 0; i <= num.size() / 2; ++i) {
            if (m[num[i]] != num[num.size() - i - 1]) return false;
        }
        return true;
    }
};

 

相似題目:ci

Strobogrammatic Number II 

Strobogrammatic Number III 

 

參考資料:

https://leetcode.com/problems/strobogrammatic-number/

https://leetcode.com/problems/strobogrammatic-number/discuss/67182/Accepted-Java-solution

https://leetcode.com/problems/strobogrammatic-number/discuss/67257/5-lines-concise-and-easy-understand-C%2B%2B-solution

 

LeetCode All in One 題目講解彙總(持續更新中...)

相關文章
相關標籤/搜索