版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址

http://blog.csdn.net/lzuacm

C#版 - Leetcode 202. 快乐数 - 题解

Leetcode 202.Happy Number

在线提交: https://leetcode-cn.com/problems/happy-number/



LintCode 488 https://www.lintcode.com/problem/happy-number/

题目描述


编写一个算法来判断一个数是不是“快乐数”。

一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。

示例:

输入: 19
输出: true

解释:

12" role="presentation" style="position: relative;">1212 + 92" role="presentation" style="position: relative;">9292 = 82

82" role="presentation" style="position: relative;">8282 + 22" role="presentation" style="position: relative;">2222 = 68

62" role="presentation" style="position: relative;">6262 + 82" role="presentation" style="position: relative;">8282 = 100

12" role="presentation" style="position: relative;">1212 + 02" role="presentation" style="position: relative;">0202 + 02" role="presentation" style="position: relative;">0202 = 1



思路:

迭代地求给定数的各位数字的平方和,维护一个set,迭代循环的出口是平方和为1或已在set中出现过。

也可当成数学问题来做,比如OEIS(用于收录整数数列规律的在线百科)网站中有介绍:

http://oeis.org/wiki/Lucky_numbers

已AC代码:

public class Solution
{
    public bool IsHappy(int n)
    {
        HashSet<int> unhappy = new HashSet<int>();
        while (!unhappy.Contains(n) && n != 1)
        {
            unhappy.Add(n);
            n = GetSquareSum(n);
        }
        return n == 1;
    }

    private int GetSquareSum(int n)
    {
        int sum = 0;
        while (n > 0)
        {
            var r = n - (n/10) * 10; // n%10
            n = n / 10;
            sum += r*r;
        }
        return sum;
    }
}

Rank:

You are here!

Your runtime beats 97.89 % of csharp submissions.

使用%取模,会降低效率,结果显示 Your runtime beats 85.21 % of csharp submissions.

更简洁的写法:

public class Solution
{
    public bool IsHappy(int n)
    {
        HashSet<int> unhappy = new HashSet<int>();
        while (n != 1 && !unhappy.Contains(n))
        {
            unhappy.Add(n);
            int sum = 0;
            while (n != 0)
            {
                var r = n - (n / 10) * 10;
                sum += r * r;
                n /= 10;
            }
            n = sum;
        }
        return n == 1;
    }
}

C#版(打败97.89%的提交) - Leetcode 202. 快乐数 - 题解的更多相关文章

  1. C#版(击败100.00%的提交) - Leetcode 372. 超级次方 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...

  2. LeetCode 202: 快乐数 Happy Number

    题目: 编写一个算法来判断一个数是不是 "快乐数". 一个 "快乐数" 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直 ...

  3. C#版(击败97.76%的提交) - Leetcode 557. 反转字符串中的单词 III - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...

  4. C#版(打败99.28%的提交) - Leetcode 347. Top K Frequent Elements - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

  5. Leetcode 202.快乐数 By Python

    编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 ...

  6. leetcode 202. 快乐数 python实现

    思想: 对输入数据 把每个位数平方求和 得到结果如果是1 就返回真 否则 对这个结果递归 啥时候事后返回假: 返回假 说明进入无限循环了. 啥时候会无限循环? 某一次求平方和的结果,之前得到过这个结果 ...

  7. Java实现 LeetCode 202 快乐数

    202. 快乐数 编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过 ...

  8. 力扣Leetcode 202. 快乐数 -快慢指针 快乐就完事了

    快乐数 编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不 ...

  9. C#版 - Leetcode 306. 累加数 - 题解

    版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...

随机推荐

  1. idea:程序包javax.servlet.http不存在

    原因:IntelliJ IDEA 缺少servlet-api.jar 这个.jar包 解决方法:由于tomcat的lib自带servlet-api.jar,可以直接导入tomcat中的jar包 1.F ...

  2. c++继承学习

    继承分类: 虚表继承 class D{ public : d(){ } ~d(){ } private: }; 单重继承 class D{ public : d(){ } ~d(){ } privat ...

  3. 一、OpenStack环境准备及共享组件安装

    一.OpenStack部署环境准备: 1.关闭防火墙所有虚拟机都要操作 # setenforce 0 # systemctl stop firewalld 2.域名解析所有虚拟机都要操作 # cat ...

  4. [OC] 线程 dispatch_group_t

    - (void)groupEvent{ //创建线程 dispatch_group_t group =dispatch_group_create(); dispatch_queue_t globalQ ...

  5. JAVA基础复习与总结<四> 抽象类与接口

    抽象类(Abstract Class) 是一种模版模式.抽象类为所有子类提供了一个通用模版,子类可以在这个模版基础上进行扩展.通过抽象类,可以避免子类设计的随意性.通过抽象类,我们就可以做到严格限制子 ...

  6. Android与ios 在input上的差异

    input{ -webkit-appearance:none; }

  7. python | Elasticsearch-dsl常用方法总结(join为案例)

    Elasticsearch DSL是一个高级库,其目的是帮助编写和运行针对Elasticsearch的查询.它建立在官方低级客户端(elasticsearch-py)之上. 它提供了一种更方便和习惯的 ...

  8. 设置mysql InnoDB存储引擎下取消自动提交事务

    mysql 存储引擎中最长用的有两种,MyISAM 存储引擎和InnoDB存储引擎. 1.MyISAM 存储引擎 不支持事务,不支持外键,优势是访问速度快: 2.InnoDB存储引擎 支持事务,一般项 ...

  9. Springboot关于脚本脚本启动的项目:

    #!/bin/bash if [ -f ~/.bash_profile ];then  . ~/.bash_profilefi JAVA_HOME=/usr/local/usr_software/jd ...

  10. 百度地图API 自定义标注图标

    通过Icon类可实现自定义标注的图标,下面示例通过参数MarkerOptions的icon属性进行设置, 也可以使用marker.setIcon()方法. <script type=" ...