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)
上一篇 2021年9月10日 下午8:00
下一篇 2021年9月10日 下午9:00


相关推荐

  • 如何解决”/”应用程序中的服务器错误

    如何解决”/”应用程序中的服务器错误如果你在做项目的时候出现了这样的错误 也就是我们在页面传参数的时候 传了个空值给控制器 它就会报这样的错误 如果我们允许那个参数为空呢 也就是在 int 后加个问号 Int 接收的参数允许为空 这样做 它接收的参数依旧为 null 也没有出现 应用程序中的服务器错误 但是却没有接收到我们想要的页面数据 还是处于错误的状态 这个时候我们可以在控制器中加上一句 我们的问题就可以解决了

    2026年3月8日
    2
  • 16G kingston U盘 解除写保护[通俗易懂]

    16G kingston U盘 解除写保护[通俗易懂]前些天买的16Gkingstonu盘忽然有了写保护,但是拆开u盘又没有看到有写保护开关。纠结加郁闷。然后一天后又忽然发生了电脑无法识别U盘,连盘符也读不出来了。里面好多资料全无,彻底让我伤心了,

    2025年10月16日
    8
  • Zynq 7020 学习心得【1】

    Zynq 7020 学习心得【1】今天对照Miz702的板子,学习了EMIO的用法,遇到了一点问题,经过分析和尝试,解决了,写出来,给大家参考一下。第一个问题,约束文件报warning,并且生成bitstream出错。开发板教程中

    2022年8月5日
    9
  • 百度

    百度

    2026年3月12日
    2
  • python注册热键_RegisterHotKey注册快捷键

    python注册热键_RegisterHotKey注册快捷键因为我们还要在程序退出的时候 消除这个热键 所以需要声明一个全局变量 HotKeyId Integer 第一步 在窗口的 create 事件中 加入以下代码 HotKeyId GlobalAddAto MyHotKey C000 注 HotKeyId 的合法取之范围是 0x0000 到 0xBFFF 之间 GlobalAddAto 函数得到的值在 0xC0

    2026年3月17日
    2
  • Android busybox安装与vim Python IDE开发环境

    Android busybox安装与vim Python IDE开发环境在Android上安装BusyBox0.先要把手机给Root了,具体教程这里就不提供了,网上有很多。1.下载BusyBox的binary,打开这个地址 http://www.busybox.net/downloads/binaries 例如下载了:/downloads/binaries/1.21.1/中的busybox-armv7l2.把下载好的busybox-armv7l用

    2022年7月25日
    28

发表回复

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

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