leetcode 202. Happy Number

xiaoxiao2021-02-28  79

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 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1 这道题挺简单的,就按照它的逻辑写就好了。

public boolean isHappy(int n) { HashSet<Integer> set=new HashSet<Integer>(); while(n!=1&&!set.contains(n)){ set.add(n); int sum=0; while(n>0){ int yu=n; n=n/10; sum+=yu*yu; } n=sum; } if(n==1){ return true; } else{ return false; } }大神表示:看到大多数人都使用hashset来记录值。而实际上,我们可以使用 Floyd Cycle detection 算法,使用在 Linked List Cycle 找环的入口的方法。既然之后有循环,我们可以看做后面有环。我们只需要看这个环的入口值是不是1。 int digitSquareSum(int n) { int sum = 0, tmp; while (n) { tmp = n % 10; sum += tmp * tmp; n /= 10; } return sum; } bool isHappy(int n) { int slow, fast; slow = fast = n; do { slow = digitSquareSum(slow); fast = digitSquareSum(fast); fast = digitSquareSum(fast); } while(slow != fast); if (slow == 1) return 1; else return 0; }

转载请注明原文地址: https://www.6miu.com/read-83379.html

最新回复(0)