[LeetCode] 246. Strobogrammatic Number 對稱數


 

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

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

Example 1:

Input:  "69"
Output: true

Example 2:

Input:  "88"
Output: true

Example 3:

Input:  "962"
Output: false

 

這道題定義了一種對稱數,就是說一個數字旋轉 180 度和原來一樣,也就是倒過來看一樣,比如 609,倒過來還是 609 等等,滿足這種條件的數字其實沒有幾個,只有 0,1,8,6,9。這道題其實可以看做求回文數的一種特殊情況,還是用雙指針來檢測,首尾兩個數字如果相等的話,只有它們是 0,1,8 中間的一個才行,如果它們不相等的話,必須一個是6一個是9,或者一個是9一個是6,其他所有情況均返回 false,參見代碼如下;

 

解法一:

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

 

由於滿足題意的數字不多,所以可以用 HashMap 來做,把所有符合題意的映射都存入哈希表中,然后雙指針掃描,看對應位置的兩個數字是否在哈希表里存在映射,若不存在,返回 false,遍歷完成返回 true,參見代碼如下:

 

解法二:

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

 

Github 同步地址:

https://github.com/grandyang/leetcode/issues/246

 

類似題目:

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 題目講解匯總(持續更新中...)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM