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
參考資料:
https://leetcode.com/problems/strobogrammatic-number/
https://leetcode.com/problems/strobogrammatic-number/discuss/67182/Accepted-Java-solution