LeetCode算法246: 中心对称数
链接: https://leetcode-cn.com/problems/strobogrammatic-number/
题目描述
中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。
请写一个函数来判断该数字是否是中心对称数,其输入将会以一个字符串的形式来表达数字。
C++代码解答
解法一
将字符串翻转,判断翻转之后的字符串是否与原字符串相等。
class Solution {
public:
bool isStrobogrammatic(std::string num) {
if (num.empty()) {
return false;
}
std::unordered_map<char, char> table{{'0', '0'}, {'1', '1'}, {'6', '9'}, {'8', '8'}, {'9', '6'}};
std::string rotate;
for (auto it = num.rbegin(); it != num.rend(); ++it) {
if (table.count(*it) == 0) {
return false;
}
rotate.push_back(table[*it]);
}
return rotate == num;
}
};
解法二
class Solution {
public:
bool isStrobogrammatic(std::string num)
{
if (num.empty()) {
return false;
}
std::size_t len = num.size();
std::unordered_map<char, char> table{{'0', '0'}, {'1', '1'}, {'8', '8'}, {'6', '9'}, {'9', '6'}};
for (std::size_t i = 0; i < len / 2; ++i) {
if (table(num[i]) != num[len - 1 - i]) {
return false;
}
}
return true;
}
}