列表

详情


246. 中心对称数

中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。

请写一个函数来判断该数字是否是中心对称数,其输入将会以一个字符串的形式来表达数字。

 

示例 1:

输入: num = "69"
输出: true

示例 2:

输入: num = "88"
输出: true

示例 3:

输入: num = "962"
输出: false

示例 4:

输入:num = "1"
输出:true

相似题目

中心对称数 II

中心对称数 III

易混淆数

原站题解

去查看

上次编辑到这里,代码来自缓存 点击恢复默认模板
class Solution { public: bool isStrobogrammatic(string num) { } };

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;
    }
}

上一题