【Leetcode】202-Happy Number【Java实现】【Easy】
2015-11-13 16:05
435 查看
Your runtime beats 82.86% of java submissions.
stem:
code:
这道题就很简单啦,开始是把flag设为int数组来着,后来感觉布尔类型的就行。
Java中int的范围为:-2147483648~2147483647,其实还是要学习一下Java中各种类型变量的范围,位数什么的。
现在开始会考虑特殊情况了,开始有这种意识了!
不过medium及以上的还是感觉不太会,还要继续呢!
discuss中有用hashset存储的,但是没有上面的快。
Java中,hashset和hashmap差不多,hashset只是封装了一个HashMap对象来存储所有的集合元素,所有放入HashSet中的集合元素实际上是由HashMap的key保存的,而HashMap的value则存储了一个PRESENT,是一个静态的Object对象。但是看速度效率不是很高:Your
runtime beats 59.60% of java submissions
其他有用位操作的,耗时2ms,算是比较优化的了,没有仔细去想清楚什么意思。
code:
stem:
Write an algorithm to determine if a number is "happy". A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers. Example: 19 is a happy number 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
code:
public class Solution { /* by qr 2015-11-12 */ public boolean isHappy(int n) { if(n==0){ return false; } if(n==1){ return true; } int temp=0; boolean flag[]=new boolean[811]; int yushu=0; while(true){ while(n!=0){ yushu=n%10; n=n/10; temp+=yushu*yushu; } if(temp==1){ return true; } if(flag[temp]){ return false; }else{ flag[temp]=true; } n=temp; temp=0; } } }
这道题就很简单啦,开始是把flag设为int数组来着,后来感觉布尔类型的就行。
Java中int的范围为:-2147483648~2147483647,其实还是要学习一下Java中各种类型变量的范围,位数什么的。
现在开始会考虑特殊情况了,开始有这种意识了!
不过medium及以上的还是感觉不太会,还要继续呢!
discuss中有用hashset存储的,但是没有上面的快。
Java中,hashset和hashmap差不多,hashset只是封装了一个HashMap对象来存储所有的集合元素,所有放入HashSet中的集合元素实际上是由HashMap的key保存的,而HashMap的value则存储了一个PRESENT,是一个静态的Object对象。但是看速度效率不是很高:Your
runtime beats 59.60% of java submissions
public class Solution { public boolean isHappy(int n) { if( n ==1 || n==-1){ return true; } HashSet<Integer> h = new HashSet<>(); int m=0; while(true){ while(n != 0){ m = m + (n%10)*(n%10); n=n/10; } if(m == 1){ return true; } if(!h.add(m)){ return false; } n=m; m=0; } } }
其他有用位操作的,耗时2ms,算是比较优化的了,没有仔细去想清楚什么意思。
code:
public boolean isHappy(int n) { int[] mark = new int[8]; while (n > 1) { n = convert(n); if (n < 243) { int sec = n >> 5; int mask = 1 << (n & 0x1f); if ((mark[sec] & mask) > 0) { return false; } mark[sec] |= mask; } } return true; } private int convert(int n) { int sum = 0; while (n > 0) { int t = n % 10; sum += t * t; n /= 10; } return sum; }
相关文章推荐
- 手机自动化测试:Appium源码分析之跟踪代码分析八
- 微信jssdk录音功能开发记录
- Unity 中Token的应用
- android 删除SD卡下指定的文件夹(高级写法)
- iOS 9音频应用播放音频之第一个ios9音频实例
- iOS 9 创建plist 文件、或文件路径查找
- 手机自动化测试:Appium源码分析之跟踪代码分析七
- Object.create函数
- PixelFlinger
- android 字符串string
- iOS之汉字转拼音
- Android 修改Android签名证书keystore的密码、别名alias以及别名的密码
- 将时间戳转换为时间,并输出“刚刚”、“昨天”、“XX小时前”等
- @RequestMapping 用法详解之地址映射(转)
- Android中图片大小、drawable文件夹、图片大小对内存占用的影响分析
- iOS N个数组,从每个数组中取出一个元素,组合,成为一个新的数组的集合
- ios 键盘风格与类型
- Appium中使用swipe方法时候出现的问题建议使用flick方法
- IOS 版本控制判断
- Android通过代码模拟物理、屏幕点击事件