題目1
題解1
class Solution:
"""
1. 子問題: DP[i] 到第i元素最多的爬取方式
2. 子方法之間的關係:
第 i 階可以由以下兩種方法得到:
在第 (i-1)階後向上爬1階。
在第 (i-2)階後向上爬2階
DP[i] = DP[i-1] + DP[i-2]
3. 起始條件: DP[0] = 0
DP[1] = 1
DP[2] = 2
4. 畫表:
i 0 1 2 3 4 5
num 1 2 3 4 5
DP 0 1 2 3 5 8
"""
def climbStairs(self, n: int) -> int:
if n < 3:
return n
DP = [None] * (n+1)
DP[1] = 1
DP[2] = 2
for i in range(3, n+1):
DP[i] = DP[i-1] + DP[i-2]
return DP[-1]
題目2
題解2
class Solution:
def mySqrt(self, x: int) -> int:
if x < 2:
return x
for i in range(1,x+1):
if x//i < i:
return i -1
題目3
題解3
class Solution:
def addBinary(self, a: str, b: str) -> str:
"""
1. 把 aa 和 bb 轉換成整型數字 xx 和 yy,xx 保存結果,yy 保存進位。
2. 當進位不爲 0:y != 0:
3. 計算當前 xx 和 yy 的無進位相加結果:answer = x^y。
4. 計算當前 xx 和 yy 的進位:carry = (x & y) << 1。
5. 完成本次循環,更新 x = answer,y = carry。
6. 返回 xx 的二進制形式。
"""
x, y = int(a, 2), int(b, 2)
while y:
x, y = x ^ y, (x & y) << 1
return bin(x)[2:]