class Solution {
public:
bool confusingNumber(int n) {
}
};
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° 以后得到的不是数字。
提示:
0 <= N <= 10^9
0008
那么该数字就是 8
。原站题解
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;//和新数字对比 不同则为结果 } }