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:
Input: 19 Output: true Explanation: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
输入: 19 输出: true 解释: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
20ms
1 class Solution { 2 func isHappy(_ n: Int) -> Bool { 3 var m:Int = n 4 var got:Set<Int> = Set<Int>() 5 while(m != 1 && !got.contains(m)) 6 { 7 got.insert(m) 8 var sum:Float = 0 9 while(m != 0) 10 { 11 sum += powf(Float(m % 10),2) 12 m /= 10 13 } 14 m = Int(sum) 15 } 16 return m == 1 17 } 18 }
12ms
1 class Solution { 2 func isHappy(_ n: Int) -> Bool { 3 var nT = n 4 5 while (nT != 1 && nT != 4) { 6 var t = 0 7 while (nT>0) { 8 t += (nT % 10) * (nT % 10) 9 nT /= 10 10 } 11 nT = t 12 } 13 return nT == 1 14 } 15 }
12ms
1 class Solution { 2 3 func nextSum(n: Int) -> Int { 4 var sum = 0 5 var nn = n 6 while nn > 0 { 7 sum += (nn % 10) * (nn % 10) 8 nn /= 10 9 } 10 11 return sum 12 } 13 14 func isHappy(_ n: Int) -> Bool { 15 var ans = nextSum(n: n) 16 while ans > 4 { 17 ans = nextSum(n: ans) 18 } 19 return ans == 1 20 } 21 22 }
16ms
1 class Solution { 2 func isHappy(_ n: Int) -> Bool { 3 guard n > 0 else { 4 return false 5 } 6 7 var set = Set<Int>() 8 var n = n 9 10 while n != 1 { 11 if set.contains(n) { 12 return false 13 } 14 set.insert(n) 15 16 var res = 0 17 while n != 0 { 18 res += (n % 10) * (n % 10) 19 n = n / 10 20 } 21 n = res 22 } 23 24 return true 25 } 26 }
原文地址:https://www.cnblogs.com/strengthen/p/9744963.html
时间: 2024-08-29 01:25:31