class Solution {
public:
bool isStrobogrammatic(string num) {
}
};
246. 中心对称数
中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。
请写一个函数来判断该数字是否是中心对称数,其输入将会以一个字符串的形式来表达数字。
示例 1:
输入: num = "69" 输出: true
示例 2:
输入: num = "88" 输出: true
示例 3:
输入: num = "962" 输出: false
示例 4:
输入:num = "1" 输出:true
原站题解
golang 解法, 执行用时: 0 ms, 内存消耗: 1.8 MB, 提交时间: 2023-10-15 19:29:37
var rotate = map[byte]byte{ '0': '0', '1': '1', '6': '9', '8': '8', '9': '6', } func isStrobogrammatic(num string) bool { rt := "" for i := len(num) - 1; i >= 0; i-- { if _, ok := rotate[num[i]]; !ok { return false } rt += string(rotate[num[i]]) } return rt == num } func isStrobogrammatic2(num string) bool { for i := 0; i <= len(num)/2; i++ { if _, ok := rotate[num[i]]; !ok { return false } if rotate[num[i]] != num[len(num)-i-1] { return false } } return true }
cpp 解法, 执行用时: 0 ms, 内存消耗: 6.3 MB, 提交时间: 2023-10-15 19:29:05
class Solution { public: unordered_map<char, char> M = { {'1', '1'}, {'0', '0'}, {'8', '8'}, {'6', '9'}, {'9', '6'}}; bool isStrobogrammatic(string num) { int N = num.size(); for (int i = 0; i <= N / 2; ++i) { if (M.count(num[i]) == 0 || M[num[i]] != num[N - 1 - i]) return false; } return true; } };
python3 解法, 执行用时: 40 ms, 内存消耗: 16 MB, 提交时间: 2023-10-15 19:28:32
class Solution: def isStrobogrammatic(self, num: str) -> bool: # 满足旋转后还是数字的数字 reverseDict = {'6':'9','9':'6','8':'8','0':'0','1':'1'} l, r = 0, len(num) - 1 while l <= r: if num[l] not in reverseDict or num[r] not in reverseDict or reverseDict[num[l]] != num[r]: return False l += 1 r -= 1 return True
java 解法, 执行用时: 0 ms, 内存消耗: 39.4 MB, 提交时间: 2023-10-15 19:28:19
class Solution { public boolean isStrobogrammatic(String num) { Map<Character, Character> map = new HashMap<>(); map.put('0', '0'); map.put('1', '1'); map.put('6', '9'); map.put('8', '8'); map.put('9', '6'); //满足要求的数字对 int left = 0, right = num.length() - 1; //双指针初始化 while(left <= right){ if(map.get(num.charAt(left)) == null || map.get(num.charAt(right)) == null) //不满足要求的数字 return false; if(map.get(num.charAt(left)) != num.charAt(right)) //check一下是否真的中心对称 return false; left++; right--; } return true; } }