[LeetCode] Strobogrammatic Number 對稱數(shù)
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
這道題定義了一種對稱數(shù),就是說一個數(shù)字旋轉(zhuǎn)180度和原來一樣谚咬,也就是倒過來看一樣杏死,比如609对妄,倒過來還是609等等筝野,滿足這種條件的數(shù)字其實(shí)沒有幾個挪拟,只有0,1,8,6,9校坑。這道題其實(shí)可以看做求回文數(shù)的一種特殊情況闯团,我們還是用雙指針來檢測,那么首尾兩個數(shù)字如果相等的話决左,那么只有它們是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;
}
};
由于滿足題意的數(shù)字不多遂跟,所以我們可以用哈希表來做逃沿,把所有符合題意的映射都存入哈希表中,然后雙指針掃描幻锁,看對應(yīng)位置的兩個數(shù)字是否在哈希表里存在映射凯亮,若不存在,返回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;
}
};