列表

详情


1056. 易混淆数

给定一个数字 N,当它满足以下条件的时候返回 true

原数字旋转 180° 以后可以得到新的数字。

如 0, 1, 6, 8, 9 旋转 180° 以后,得到了新的数字 0, 1, 9, 8, 6 。

2, 3, 4, 5, 7 旋转 180° 后,得到的不是数字。

易混淆数 (confusing number) 在旋转180°以后,可以得到和原来不同的数,且新数字的每一位都是有效的。

 

示例 1:

输入:6
输出:true
解释: 
把 6 旋转 180° 以后得到 9,9 是有效数字且 9!=6 。

示例 2:

输入:89
输出:true
解释: 
把 89 旋转 180° 以后得到 68,68 是有效数字且 89!=68 。

示例 3:

输入:11
输出:false
解释:
把 11 旋转 180° 以后得到 11,11 是有效数字但是值保持不变,所以 11 不是易混淆数字。 

示例 4:

输入:25
输出:false
解释:
把 25 旋转 180° 以后得到的不是数字。

 

提示:

  1. 0 <= N <= 10^9
  2. 可以忽略掉旋转后得到的前导零,例如,如果我们旋转后得到 0008 那么该数字就是 8

相似题目

中心对称数

易混淆数 II

原站题解

去查看

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

cpp 解法, 执行用时: 0 ms, 内存消耗: 6.3 MB, 提交时间: 2023-10-15 17:39:07

class Solution {
public:
    bool confusingNumber(int N) {
        unordered_map<char, char> dic {{'0', '0'}, {'1', '1'}, {'8', '8'}, {'6', '9'}, {'9', '6'}};
        string s = to_string(N);
        /*
        string s = "";              //转化成字符串
        int n = N;
        while(n)
        {
            int cur_bit = n % 10;
            char c = '0' + cur_bit;
            s = c + s;
            n /= 10;
        }
        */
        string rev_s = "";          //翻转后的字符串
        for (char c: s) {
            if (dic.count(c) == 0)
                return false;
            rev_s = dic[c] + rev_s; //左右也要变顺序
        }
        return rev_s != s;          //得到不同的
    }
};

python3 解法, 执行用时: 44 ms, 内存消耗: 16.1 MB, 提交时间: 2023-10-15 17:38:29

class Solution:
    def confusingNumber(self, N: int) -> bool:
        dic = {'0':'0', '1':'1', '8':'8', '6':'9', '9':'6'}
        s = str(N)
        rev_s = ""
        for c in s:
            if c not in dic:
                return False
            rev_s = dic[c] + rev_s
        return rev_s != s

golang 解法, 执行用时: 4 ms, 内存消耗: 1.8 MB, 提交时间: 2023-10-15 17:37:58

func confusingNumber(n int) bool {
	m := map[int]int{
		0: 0,
		1: 1,
		6: 9,
		8: 8,
		9: 6,
	}
	origin := n  // 原始值
	reverse := 0 // 反转后的值
	for n > 0 {
		if _, ok := m[n%10]; !ok {
			return false
		}
		reverse = reverse*10 + m[n%10]
		n /= 10
	}
	return reverse != origin
}

php 解法, 执行用时: 0 ms, 内存消耗: 18.8 MB, 提交时间: 2023-10-15 17:37:29

class Solution {

    /**
     * @param Integer $n
     * @return Boolean
     */
    function confusingNumber($n) {
        //原数字旋转180 合法为 旋转后的数字 或则不合法为-1 映射
      //原数字=k 0 1  2  3  4  5 6  7 8 9
        $map = [0,1,-1,-1,-1,-1,9,-1,8,6];
        $m = $n;//复制一份 方便循环操作
        $newnum =0;
        while($m>0){
            $last = $m%10;//从低位到高位判断每一位合法否
            //不合法
            if($map[$last]<0){
                return false;
            }
            //合法 翻转
            $newnum = $newnum * 10 +$map[$last];
            $m = intval($m/10);
        }
        return $newnum != $n;
    }
    function confusingNumber1($n) {
        $valid = [0=>0,1=>1,6=>9,8=>8,9=>6];
        $invalid = [2=>1,3=>1,4=>1,5=>1,7=>1];
        $arr = str_split($n);//将数字字符转成列表
        $len = count($arr);
        $newnum = "";
        for($i=0;$i<$len;$i++){
            //如果数字不合法停止
            if(isset($invalid[$arr[$i]])){
                return false;
            }
            //合法拼接成新的数字
            $newnum .= $valid[$arr[$i]];
        }
        $m = strrev($n);//原数字翻转
        return $m!=$newnum;//和新数字对比 不同则为结果
        
    }
}

上一题