leetcode happy number

leetcode happy number

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

有一些题一看我就觉得有些难,这就是一道。首先,我很不喜欢题目里定义了很多东西这样。于是乎,刚开始的思路就华丽丽地跑偏了,走到了总结规律上面。

是的,没错,我首先想到的就是有什么规律,什么规律会是一个happy number。。想了很多甚至连(a+b)2=a2+b2+2ab呀这种公式都试啊试的

后来就想着算了,按照这个走吧。

问题一:提取每一位,刚开始都忘记了怎么提取每一位。不过后来想到了。

问题二:怎样就判断不是happy number了,这也是一个卡住我的地方,我最开始想的是假如回到原点就不是happy number了,就是2计算了一堆最后又回到2,2显然不是happy number。

但是,没错,超时了。后来看了陆草纯的代码,其他搜了很多都是用set实现的,我明显更加喜欢map,陆草纯用map记录了哪些数字已经被计算过但是不是happy number的。这其实是一个循环。例如

2->4->16->37->58->89->145->20->2->4…开始循环,所以这个循环里的每个数都会进入一个圈圈。我们用map记录哪些已经被计算过,如果已经被计算过,我们又遇到它且它不为1,直接false说明我们进入一个循环。

因为一个happy number的数列里一定是只出现一次的。

 

 1 class Solution {
 2 public:
 3     int GetSum(int n){
 4         int c=0,sum=0;
 5          while(n!=0){
 6             c=n%10;
 7             n/=10;
 8             sum+=(c*c);
 9         }
10         return sum;
11     }
12         
13     bool isHappy(int n) {
14         if(n==1) return true;
15         unordered_map<int,bool> haveCalIt;
16         int sum=GetSum(n);
17         while(sum!=1){
18             if(haveCalIt[sum]==true) return false;
19             haveCalIt[sum]=true;
20             sum=GetSum(sum);
21             
22         }
23         return true;
24     }
25 };

 

转载于:https://www.cnblogs.com/LUO77/p/4978375.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109244.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • page对象的使用及常见方法

    page对象的使用及常见方法page对象的使用及常见方法制作人:全心全意page对象代表JSP本身,只有在JSP页面内才是合法的。page对象本质上是包含当前Servlet接口引用的变量,可以看作是this关键字的别名。p

    2022年7月4日
    38
  • ajax html例子,AJAX实例[通俗易懂]

    ajax html例子,AJAX实例[通俗易懂]AJAX实例实例一:一个简单的AJAX实例创建一个简单的XMLHttpRequest,从一个TXT文件中返回数据实例functionloadXMLDoc(){varxmlhttp;if(window.XMLHttpRequest){//IE7+,Firefox,Chrome,Opera,Safari浏览器执行代码xmlhttp=newXMLHttpRequest();}els…

    2022年8月16日
    5
  • shiro面试知识点总结_jmeter面试常见问题

    shiro面试知识点总结_jmeter面试常见问题Shiro总结和常见面试题一、 什么是shiroShiro是一个强大易用的java安全框架,提供了认证、授权、加密、会话管理、与web集成、缓存等功能,对于任何一个应用程序,都可以提供全面的安全服务,相比其他安全框架,shiro要简单的多。二、 Shiro的核心概念Subject、SecurityManager、RealmSubject:主体,代表了当前“用户”,这个用户不一定是一个具体的…

    2022年10月14日
    0
  • 最新安卓JAVA模拟器_安卓java模拟器完美版下载-安卓java模拟器直装最新版下载v1.4.6 – 欧普软件园…

    最新安卓JAVA模拟器_安卓java模拟器完美版下载-安卓java模拟器直装最新版下载v1.4.6 – 欧普软件园…安卓java模拟器是一款十分好用的游戏模拟器,在这款软件里面你能够看到海量的游戏内容,各种2D、3D的游戏玩,无需你下载,直接在模拟器里面就可以开启你的游戏模式了。虚拟按键的设置也是十分简单的,快来下载享受游戏带来的快乐吧!安卓java模拟器软件介绍J2ME模拟器Android版J2MELoader是一个Android版的J2ME(Java2MicroEdition)模拟器。它支持大多数的…

    2022年7月7日
    33
  • word2010求和符号上下标的打法_求和符号只有下标是什么意思

    word2010求和符号上下标的打法_求和符号只有下标是什么意思想输入的公式:只要在公式旁边继续加文字就会变成这样:解决方法只能在office上实现不能在wps上先输入Alt+=,得到下图在里面进行输入输入\below,空格键按两次在得到的大框里输入\sum空格键按一次在总和符号旁边输入\above空格键两次得到想要的符合。转载于https://jingyan.baidu.com/article/a17d528558c3bbc199c8f25d.html…

    2022年10月7日
    0
  • Android补间动画之ScaleAnimation、AlphaAnimation、RotateAnimation、TranslateAnimation、AnimationSet详解「建议收藏」

    Android补间动画之ScaleAnimation、AlphaAnimation、RotateAnimation、TranslateAnimation、AnimationSet详解「建议收藏」首发:http://blog.csdn.net/harvic880925/article/details/40117115一、概述前两篇,我为大家讲述了利用XML来定义动画及插值器,但在代码中,我们常常是动态生成动画的,所以,这篇将为大家讲述如何用代码生成动态生成动画及插值器。先简单写出各个标签对应的类,方便大家理解:scale—— ScaleAnimatio

    2022年10月11日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号