前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#版(打败97.89%的提交) - Leetcode 202. 快乐数 - 题解

C#版(打败97.89%的提交) - Leetcode 202. 快乐数 - 题解

作者头像
Enjoy233
发布2019-03-05 15:39:36
3960
发布2019-03-05 15:39:36
举报

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,那么这个数就是快乐数。

示例:

代码语言:javascript
复制
输入: 19
输出: true

解释: 12121^2 + 92929^2 = 82 82828^2 + 22222^2 = 68 62626^2 + 82828^2 = 100 12121^2 + 02020^2 + 02020^2 = 1



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

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

已AC代码:

代码语言:javascript
复制
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.

更简洁的写法:

代码语言:javascript
复制
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;
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年06月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C#版 - Leetcode 202. 快乐数 - 题解
    • 题目描述
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档