一、1217. 玩筹码
1.1、题目描述, 阅读题: 每个筹码的 位置 存在chips中
奇数位置到奇数位置不消耗 偶数位置到偶数位置不消耗 奇数位置到偶数位置消耗1个单位 所以最终停留在奇数位置还是偶数位置,只需要判断奇数位置多还是偶数位置多。
class Solution:
def minCostToMoveChips(self, chips: List[int]) -> int:
odd = 0
for i in chips:
if i & 1 == 1:
odd += 1
return min(odd, len(chips)-odd)
二、258. 各位相加
2.1、题目描述
class Solution:
def addDigits(self, num: int) -> int:
while num >= 10:
num = self.add(num)
return num
def add(self, num: int) -> int:
_sum = 0
while num != 0:
_sum += num%10
num = num//10
return _sum
2.2.2、数学
class Solution:
def addDigits(self, num: int) -> int:
if num == 0: return 0
return (num - 1) % 9 + 1
三、202. 快乐数
3.1、题目描述
class Solution:
def isHappy(self, n: int) -> bool:
seed = {1}
while n not in seed:
seed.add(n)
n = self.add(n)
return n == 1
def add(self, num: int) -> int:
_sum = 0
while num != 0:
_sum += pow(num%10, 2)
num = num//10
return _sum
3.2.2、如果不是快乐数 最终会出现4 16 37 58 89 145 42 20循环
class Solution:
def isHappy(self, n: int) -> bool:
return self.isHappy(sum(int(i) ** 2 for i in str(n))) if n > 4 else n == 1
3.2.3、快慢指针
class Solution:
def isHappy(self, n: int) -> bool:
n = str(n)
slow = n
fast = str(sum(int(i) ** 2 for i in n))
while slow != fast:
slow = str(sum(int(i) ** 2 for i in slow))
fast = str(sum(int(i) ** 2 for i in fast))
fast = str(sum(int(i) ** 2 for i in fast))
return slow == "1"