C#版(打败97.89%的提交) - Leetcode 202. 快乐数 - 题解
版权声明: 本文为博主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. 快乐数 - 题解的更多相关文章
- C#版(击败100.00%的提交) - Leetcode 372. 超级次方 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...
- LeetCode 202: 快乐数 Happy Number
题目: 编写一个算法来判断一个数是不是 "快乐数". 一个 "快乐数" 定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直 ...
- C#版(击败97.76%的提交) - Leetcode 557. 反转字符串中的单词 III - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. Leetcod ...
- C#版(打败99.28%的提交) - Leetcode 347. Top K Frequent Elements - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
- Leetcode 202.快乐数 By Python
编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 ...
- leetcode 202. 快乐数 python实现
思想: 对输入数据 把每个位数平方求和 得到结果如果是1 就返回真 否则 对这个结果递归 啥时候事后返回假: 返回假 说明进入无限循环了. 啥时候会无限循环? 某一次求平方和的结果,之前得到过这个结果 ...
- Java实现 LeetCode 202 快乐数
202. 快乐数 编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过 ...
- 力扣Leetcode 202. 快乐数 -快慢指针 快乐就完事了
快乐数 编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不 ...
- C#版 - Leetcode 306. 累加数 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - L ...
随机推荐
- afx.h(78): fatal error C1083: 无法打开包括文件: “new.h”: No such file or directory
vs2015新建mfc工程,编译错误: D:\program files (x86)\microsoft visual studio 14.0\vc\atlmfc\include\afx.h(78): ...
- 实现ssr服务端渲染
前言 前段时间寻思做个个人网站,然后就立马行动了. 个人网站如何实现选择什么技术方案,自己可以自由决定. 刚好之前有大致想过服务端渲染,加载速度快,还有 SEO 挺适合个人网站的. 所以就自己造 ...
- windows下编译SDL1.2
首先,官网下载开发库,我这里用的是tdm-gcc,因此下载mingw版的. 解压,写代码,编译…… 成功!...地出错了 这里提一下,编译命令是 g++ test.cpp -I include目录 ...
- Navicat Premium 12 (64位)实现连接Oracle 11 (64位)
查看Oracle的版本 select * from v$version 我这里是11.2的64位的版本,然后从官网下载相应版本的客户端. 下载相应版本的客户端 官网地址:https://www.ora ...
- BZOJ2649 : riddle
题意同3495,但是内存限制收紧了,不能采用3495的前后缀优化建图的方式. 注意到“每个集合恰好选择一个点”可以放宽成“每个集合最多选择一个点”,对于最后求出的方案里,如果某个集合没选点,任选一个就 ...
- oracle之序列用法
序列用于生成唯一.连续序号的对象序列是可以升序.降序的使用create sequence语句创建序列SQL>CREATE SEQUENCE stu_seq START WITH 1 ...
- 查找更改的PeopleCode
当我们做工程包迁移时,经过会遗漏部分更改过的定义.我们可以用下面的SQL来查找变更项 变量 &OPRID =代码变更者 变量 &PROJECT 项目工程名 SELECT * FROM ...
- 使用Axis2创建一个简单的WebService服务
使用过Java进行过WebService开发都会听过或者接触过Apache Axis2,Axis2框架是应用最广泛的WebService框架之一了. 这里使用Axis2来开发和部署一个最简单的WebS ...
- A_B_Good Bye 2018_cf
A. New Year and the Christmas Ornament time limit per test 1 second memory limit per test 256 megaby ...
- hadoop伪分布式搭建
安装好jdk 减压hadoop压缩包 cd /home/hadoop/hadoop-2.7.3/etc/hadoop vi hadoop-env.sh 文件末尾处添加 jdk环境变量 export J ...