朋友面试头条二轮了,一轮的题目请看这一篇:头条面试题:求用户在线峰值和持续时间
这次的面试题目是:判断一个数是否是happy number(每一位的平方和最终为1)
知道题目首先要理解题目。所谓happy number就是一个整数每个位数上的数字的平方相加,一直循环,如果最终能等于1,则就是happy number。
举例:19
第一次:1²=9²=82
第二次:8²+2²=68
第三次:6²+8²=100
第四次:1
这样的数就是happy number。
怎么解决呢?这样的问题可以一直循环运算,发现等于1就是happy number,不等于就不是。我朋友就采取的是这种方法。但这种方法有个问题,如果不是happy number要什么时候停止循环进行判断呢?因为不知道循环是否是重复的,或还是无限不重复的循环。还有就是这种循环极容易溢出,所以最好的方法还是要找出规律。
以下就是我的线下手动运算,目的是找出规律:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuATO1QDO0IDN50SMwETOyIzMwEjNwQDMxIDMy0CN4MTMwATMvwFNwEjMwIzLcRDOzEDMwEzLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
从0~19的运算结果来看可以得出以下结论:
1.0不是happy number;
2.所有happy number最终都能等于1;
3.所有不是happy number的数都是无限重复循环,且都从4开始循环。
得出了以上规律就可以开始写程序代码了。
计算平方和的方法:
判断是否是Happy Number:
最后在main方法中调用:
测试:
成功!!!
项目下载地址:https://gitee.com/jingboweilanGO/happy-number.git
如果觉得不错,可以推荐收藏一下,让我也更有动力。