[LeetCode] Strobogrammatic Number 對稱數
阿新 • • 發佈:2018-12-27
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(stringnum) { 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,參見程式碼如下:
解法二:
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; } };
類似題目:
參考資料: