Merge pull request #1099 from Verolilo/master

更新0070.爬楼梯.md python版本
This commit is contained in:
程序员Carl
2022-03-08 12:08:50 +08:00
committed by GitHub
2 changed files with 37 additions and 23 deletions

View File

@ -256,16 +256,28 @@ public int climbStairs(int n) {
### Python ### Python
```python ```python
# 空间复杂度为O(n)版本
class Solution: class Solution:
def climbStairs(self, n: int) -> int: def climbStairs(self, n: int) -> int:
# dp[i]表示爬到第i级楼梯的种数 (1, 2) (2, 1)是两种不同的类型 # dp[i] 为第 i 阶楼梯有多少种方法爬到楼顶
dp = [0] * (n + 1) dp=[0]*(n+1)
dp[0] = 1 dp[0]=1
for i in range(n+1): dp[1]=1
for j in range(1, 3): for i in range(2,n+1):
if i>=j: dp[i]=dp[i-1]+dp[i-2]
dp[i] += dp[i-j] return dp[n]
return dp[-1]
# 空间复杂度为O(1)版本
class Solution:
def climbStairs(self, n: int) -> int:
dp=[0]*(n+1)
dp[0]=1
dp[1]=1
for i in range(2,n+1):
tmp=dp[0]+dp[1]
dp[0]=dp[1]
dp[1]=tmp
return dp[1]
``` ```
### Go ### Go

View File

@ -123,22 +123,24 @@ Python
```Python ```Python
class Solution: class Solution:
def rob(self, nums: List[int]) -> int: def rob(self, nums: List[int]) -> int:
if (n := len(nums)) == 0: #在198入门级的打家劫舍问题上分两种情况考虑
return 0 #一是不偷第一间房,二是不偷最后一间房
if n == 1: if len(nums)==1:#题目中提示nums.length>=1,所以不需要考虑len(nums)==0的情况
return nums[0] return nums[0]
result1 = self.robRange(nums, 0, n - 2) val1=self.roblist(nums[1:])#不偷第一间房
result2 = self.robRange(nums, 1, n - 1) val2=self.roblist(nums[:-1])#不偷最后一间房
return max(result1 , result2) return max(val1,val2)
def robRange(self, nums: List[int], start: int, end: int) -> int: def robRange(self,nums):
if end == start: return nums[start] l=len(nums)
dp = [0] * len(nums) dp=[0]*l
dp[start] = nums[start] dp[0]=nums[0]
dp[start + 1] = max(nums[start], nums[start + 1]) for i in range(1,l):
for i in range(start + 2, end + 1): if i==1:
dp[i] = max(dp[i -2] + nums[i], dp[i - 1]) dp[i]=max(dp[i-1],nums[i])
return dp[end] else:
dp[i]=max(dp[i-1],dp[i-2]+nums[i])
return dp[-1]
``` ```
javascipt: javascipt: