7月21日打卡
今天目前写了爬楼梯的三道题目,以及合并有序的链表:最后附有代码#爬楼梯 三个题目#(1)普通爬楼梯 每次只能走一个台阶或者两个台阶#(2)加条件:爬两个台阶之后只能走两个连续的一个台阶#(3)加条件:怕两个台阶之后只能走一个台阶自己的感悟:首先就是画图很重要,需要把这个转换的图画出来,如下图所示,这样才更容易写出来:(2)的图:(3)的图:然后的话,自己在写代码的过程中出现的问题:1.dp[0][0]=1写成了dp[0]=12.dp[i][1]=dp[i-2][0] if i-2=0 else 0 这里注意应该是i-2的自由态 走了两步 然后走到了 i 的限制1的状态 ; dp[i][1]=dp[i-2][0] if i-2=0 else 0 同理,这个也是i-2的自由态 走了两步 然后走到了i 的 下一步智能走1的状态完整的代码如下:(1)--------------------------------------------class Solution: def climbStairs(self, n: int) - int: a,b=1,1 for i in range(n-1): a,b=b,a+b return b(2)--------------------------------------------class Solution: def climbStairs(self, n: int) - int: if n==1: return 1 dp=[[0,0,0] for _ in range(n+1)] dp[0][0]=1 for i in range(1,n+1): dp[i][0]=dp[i-1][0]+dp[i-1][2] dp[i][1]=dp[i-2][0] if i-2=0 else 0 dp[i][2]=dp[i-1][1] return sum(dp[n]) (3)--------------------------------------------class Solution: def climbStairs(self, n: int) - int: if n==1: return 1 dp=[[0,0,0] for _ in range(n+1)] dp[0][0]=1 for i in range(1,n+1): dp[i][0]=dp[i-1][0]+dp[i-1][1] dp[i][1]=dp[i-2][0] if i-2=0 else 0 return sum(dp[n])合并有序的链表:思路就是递归调用,比较简单,在写的过程中出现了一点问题就是:比较两个链表的第一个值的时候要写l1.vall2.val而不是l1l2# Definition for singly-linked list.# class ListNode:# def __init__(self, val=0, next=None):# self.val = val# self.next = nextclass Solution: def mergeTwoLists(self, list1: Optional[ListNode], list2: Optional[ListNode]) - Optional[ListNode]: if not list1: return list2 if not list2: return list1 if list1.vallist2.val: list1.next=self.mergeTwoLists(list1.next,list2) return list1 else: list2.next=self.mergeTwoLists(list1,list2.next) return list2