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 and replace the number by the Sum of the squares of its digits, and repeat the process until the number equals 1 (where it would stay), or it loops Endl essly in a cycle which does not include 1. Those numbers for which this process ends in 1 is happy numbers.
Example: is a happy number
- 12 + 92 = 82
- 82 + 22 = 68
- 62 + 82 = 100
- 12 + 02 + 02 = 1
Naive way:the statement is describing a recursive process. So it's obvious, the question want me to write a recursive method. The logic has been stated and clear. Base case (ending condition) was either N=1 or N has been visited. And since I need to mark whether a number have been visited, a hashset is required.
1 Public classSolution { 2 set<integer> visited = new hashset<integer>(); This is to be defined in the front 3 Public BooleanIshappy (intN) {4 //Base Case5 if(n==1)return true; 6 //visited7 if(Visited.contains (n))return false; 8 //Main processing9 intsum = 0; Ten Visited.add (n); One while(n!=0){ A intLastdigit = n 10; -Sum + = Lastdigit *Lastdigit; -N/= 10; the } - returnishappy (sum); - } -}
Reference:http://siyang2leetcode.blogspot.com/2015/05/happy-number.html
*happy number