Question from https://leetcode.com/problemset/algorithms/ 第202题
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
Answer:
class Solution {
public:
bool isHappy(int n) {
int *hash = new int[1000];
for(int i=0;i<1000;i++){
hash[i] = 0;
}
int m = n;
bool flag = false;
while(true){
m=getSum(m);
if(m==1){
flag = true;
break;
}else if(hash[m]==1||m==n){
break;
}
hash[m] = 1;
}
return flag;
}
static int getSum(int n){
int sum = 0;
while(n>0){
int t = n%10;
sum += t*t;
n /= 10;
}
return sum;
}
};
public:
bool isHappy(int n) {
int *hash = new int[1000];
for(int i=0;i<1000;i++){
hash[i] = 0;
}
int m = n;
bool flag = false;
while(true){
m=getSum(m);
if(m==1){
flag = true;
break;
}else if(hash[m]==1||m==n){
break;
}
hash[m] = 1;
}
return flag;
}
static int getSum(int n){
int sum = 0;
while(n>0){
int t = n%10;
sum += t*t;
n /= 10;
}
return sum;
}
};
原文链接:http://blog.youkuaiyun.com/gotobar/article/details/45193515
不知为何C++里的HashTable,Set,Vector等用不了,说是不在可编译范围内,所以找到了这篇博客可以解决问题。
其余code:
- public class Solution {
- public boolean isHappy(int n) {
- if(n<=0) return false;
- long ln = n;
- Set<Long> set = new HashSet<Long>();
- while(ln<=Integer.MAX_VALUE) {
- if(set.contains(ln) ) return false; else set.add(ln);
- ln = digitSquare(ln);
- if(ln == 1) return true;
- }
- return false;
- }
- private long digitSquare(long ln) {
- long sum = 0;
- while(ln!=0) {
- sum += Math.pow(ln%10, 2);
- ln /= 10;
- }
- return sum;
- }
- }
总是会提示这个错误,不知为何。但代码的解法还是可以的。
原文链接:http://blog.youkuaiyun.com/xudli/article/details/45267247