mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
Update 0202.快乐数.md
This commit is contained in:
@ -108,23 +108,14 @@ class Solution {
|
|||||||
```
|
```
|
||||||
|
|
||||||
Python:
|
Python:
|
||||||
|
(版本一)使用集合
|
||||||
```python
|
```python
|
||||||
class Solution:
|
class Solution:
|
||||||
def isHappy(self, n: int) -> bool:
|
def isHappy(self, n: int) -> bool:
|
||||||
def calculate_happy(num):
|
|
||||||
sum_ = 0
|
|
||||||
|
|
||||||
# 从个位开始依次取,平方求和
|
|
||||||
while num:
|
|
||||||
sum_ += (num % 10) ** 2
|
|
||||||
num = num // 10
|
|
||||||
return sum_
|
|
||||||
|
|
||||||
# 记录中间结果
|
|
||||||
record = set()
|
record = set()
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
n = calculate_happy(n)
|
n = self.get_sum(n)
|
||||||
if n == 1:
|
if n == 1:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@ -134,21 +125,86 @@ class Solution:
|
|||||||
else:
|
else:
|
||||||
record.add(n)
|
record.add(n)
|
||||||
|
|
||||||
# python的另一种写法 - 通过字符串来计算各位平方和
|
def get_sum(self,n: int) -> int:
|
||||||
|
new_num = 0
|
||||||
|
while n:
|
||||||
|
n, r = divmod(n, 10)
|
||||||
|
new_num += r ** 2
|
||||||
|
return new_num
|
||||||
|
```
|
||||||
|
(版本二)使用集合
|
||||||
|
```python
|
||||||
|
class Solution:
|
||||||
|
def isHappy(self, n: int) -> bool:
|
||||||
|
record = set()
|
||||||
|
while n not in record:
|
||||||
|
record.add(n)
|
||||||
|
new_num = 0
|
||||||
|
n_str = str(n)
|
||||||
|
for i in n_str:
|
||||||
|
new_num+=int(i)**2
|
||||||
|
if new_num==1: return True
|
||||||
|
else: n = new_num
|
||||||
|
return False
|
||||||
|
```
|
||||||
|
(版本三)使用数组
|
||||||
|
```python
|
||||||
class Solution:
|
class Solution:
|
||||||
def isHappy(self, n: int) -> bool:
|
def isHappy(self, n: int) -> bool:
|
||||||
record = []
|
record = []
|
||||||
while n not in record:
|
while n not in record:
|
||||||
record.append(n)
|
record.append(n)
|
||||||
newn = 0
|
new_num = 0
|
||||||
nn = str(n)
|
n_str = str(n)
|
||||||
for i in nn:
|
for i in n_str:
|
||||||
newn+=int(i)**2
|
new_num+=int(i)**2
|
||||||
if newn==1: return True
|
if new_num==1: return True
|
||||||
n = newn
|
else: n = new_num
|
||||||
return False
|
return False
|
||||||
```
|
```
|
||||||
|
(版本四)使用快慢指针
|
||||||
|
```python
|
||||||
|
class Solution:
|
||||||
|
def isHappy(self, n: int) -> bool:
|
||||||
|
slow = n
|
||||||
|
fast = n
|
||||||
|
while self.get_sum(fast) != 1 and self.get_sum(self.get_sum(fast)):
|
||||||
|
slow = self.get_sum(slow)
|
||||||
|
fast = self.get_sum(self.get_sum(fast))
|
||||||
|
if slow == fast:
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
def get_sum(self,n: int) -> int:
|
||||||
|
new_num = 0
|
||||||
|
while n:
|
||||||
|
n, r = divmod(n, 10)
|
||||||
|
new_num += r ** 2
|
||||||
|
return new_num
|
||||||
|
```
|
||||||
|
(版本五)使用集合+精简
|
||||||
|
```python
|
||||||
|
class Solution:
|
||||||
|
def isHappy(self, n: int) -> bool:
|
||||||
|
seen = set()
|
||||||
|
while n != 1:
|
||||||
|
n = sum(int(i) ** 2 for i in str(n))
|
||||||
|
if n in seen:
|
||||||
|
return False
|
||||||
|
seen.add(n)
|
||||||
|
return True
|
||||||
|
```
|
||||||
|
(版本六)使用数组+精简
|
||||||
|
```python
|
||||||
|
class Solution:
|
||||||
|
def isHappy(self, n: int) -> bool:
|
||||||
|
seen = []
|
||||||
|
while n != 1:
|
||||||
|
n = sum(int(i) ** 2 for i in str(n))
|
||||||
|
if n in seen:
|
||||||
|
return False
|
||||||
|
seen.append(n)
|
||||||
|
return True
|
||||||
|
```
|
||||||
Go:
|
Go:
|
||||||
```go
|
```go
|
||||||
func isHappy(n int) bool {
|
func isHappy(n int) bool {
|
||||||
|
Reference in New Issue
Block a user