易混淆数

给定一个数字 N,当它满足以下条件的时候返回 true:把原数字旋转180°以后得到新的数字。如 0, 1, 6, 8, 9 旋转 180° 以后,得到了新的数字 0, 1, 9, 8, 6 。2, 3, 4, 5, 7 旋转 180° 后,得到的不是数字。易混淆数字 (confusing number) 就是一个数字旋转180°以后,得到和原来不同的数字,且新数字的每一位都是有效的。

示例 1:

输入:89

输出:true

解释:

把 89 旋转 180° 以后得到 68,68 是有效数字且 68!=89 。

示例 2:

输入:25

输出:false

解释:

把 25 旋转 180° 以后得到的不是数字。


分析

1. 已知0, 1, 6, 8, 9 旋转 180° 以后,得到新的数字 0, 1, 9, 8, 6。 那么给定一个整数,我可以先分析它里面每位数字旋转情况。如619,将每位数字用旋转后新的数字代替就成了916,但是按整体来旋转180°应该是619,所以我们还需要将916反转。通过分析,如果采用java来实现的话,可以先将整数N转化成字符串str,用hashmap来存储0, 1, 6, 8, 9以及它们对应旋转之后的值,在这里我们还需要创建一个StringBuilder对象tmp来接收旋转后的值并将它们组合成字符串,从字符串str中依次取出每位数字放在hashmap中寻找,如果找到了就将结果连接到tmp中(至于旋转之后不是数字的情况我将在后面讨论),直到遍历完str,我们就得到了每位数字原地旋转的情况,接着用StringBuilder类中的reverse方法可以将字符串反转,用toString方法将其转化成String类再做相应判断。部分代码如下:

String str = Integer.toString(N);

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'); StringBuilder tmp =new StringBuilder(); for(int i = 0; i < str.length(); i++){
tmp.append(map.get(str.charAt(i)));
}

2. 2,3, 4, 5, 7 旋转 180° 后,得到的不是数字。 很显然,如果给定的整数N中存在这些数,那么N一定不是易混淆数,直接返回false。部分代码如下:

char[] ch = {'2','3','4','5','7'};
for(char c : ch){
if(str.indexOf(c) != -1)
return false;
}

3. 易淆数字 (confusing number) 就是一个数字旋转180°以后,得到和原来不同的数字,且新数字的每一位都是有效的。 这里说明整数N旋转180°以后不能仍为N, 如我在1中提到的619,旋转之后仍为619,那么它并不是易混淆数。部分代码如下:

if(tmp.reverse().toString().equals(str))
return false;
else
return true;

总结

对于这个问题,如果我们从整体考虑的话有点无从下手,所以采取化整为零,再化零为整的策略就容易的多,下面附上全部的代码:

public static boolean confusingNumber(int N) {
String str = Integer.toString(N); char[] ch = {'2','3','4','5','7'};
for(char c : ch){
if(str.indexOf(c) != -1)
return false;
} 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'); StringBuilder tmp =new StringBuilder();
for(int i = 0; i < str.length(); i++){
tmp.append(map.get(str.charAt(i)));
} if(tmp.reverse().toString().equals(str))
return false;
else
return true;
}

最新文章

  1. Linux 常用命令(持续补充)
  2. Atitit.计算机图形图像图片处理原理与概论attilax总结
  3. 转MYSQL学习(五) 索引
  4. linux Chrome 安装
  5. fqrouter让安卓手机登陆facebook成为可能
  6. FTP方式获取文件步骤
  7. CSS3 transition 属性 过渡效果
  8. Basic Example of JMX Technology--转载
  9. Hadoop 2.4.0完全分布式平台搭建、配置、安装
  10. Yii url createUrl redirect相关
  11. HttpClient get返回String类型 JAVA
  12. 【HDU2120】Ice_cream&#39;s world I(并查集基础题)
  13. ACM比赛(第三次D)
  14. BZOJ 4143: [AMPPZ2014]The Lawyer( sort )
  15. ant语法和规范
  16. jackson - 生成jason工具-简单示例
  17. OOP编程特性综合项目
  18. 二维字符数组利用gets输入
  19. CentOS 7 minimal网络配置
  20. maven依赖包下载地址

热门文章

  1. 松软科技web课堂:SQLServer之MIN() 函数
  2. jQuery中$()函数的7种用法汇总
  3. IE11,用Forms身份验证保存不了Cookie
  4. 数字图像处理:图像的灰度变换(Matlab实现)
  5. echarts玩转图表之矩形树图
  6. python中线程 进程 协程
  7. Codeforces Global Round 5
  8. javaee和javase的区别
  9. jinja2模板用法
  10. Go 变量(var) &amp; 常量(const)