61 - 67 这周时间不多 每日一题做少了
61 旋转列表
被大多数人击败 不想写题解
应该与我数了长度有关
我想的是这样后面不用再遍历了
很长时有利
# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def rotateRight(self, head: Optional[ListNode], k: int) -> Optional[ListNode]: if k == 0: return head if head == None: return head header = ListNode(0,head) n = 0 p = header q = header while p.next != None: n = n+1 p = p.next if n > k: q = q.next if n > k: p.next = header.next header.next = q.next q.next = None return header.next k = k%(n) if k == 0 : return head n = 0 p = header q = header while p.next != None: n = n+1 p = p.next if n > k: q = q.next p.next = header.next header.next = q.next q.next = None return header.next 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/rotate-list/solution/bei-duo-shu-ren-ji-bai-bu-xiang-xie-ti-j-ef8m/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
62:不同路径
简单的dp 简单的一天
class Solution: def uniquePaths(self, m: int, n: int) -> int: dp = [[0]*n for i in range(m)] for i in range(n): dp[m-1][i] = 1 for i in range(m): dp[i][n-1] = 1 for col in range(n-2,-1,-1): for row in range(m-2,-1,-1): dp[row][col] = dp[row+1][col] + dp[row][col+1] return dp[0][0] 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/unique-paths/solution/jian-dan-de-dp-jian-dan-de-yi-tian-by-yi-ypcr/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
63:
障碍不同路径 跟上题没啥差别
遇到障礙就把障礙這裏變成0
class Solution: def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int: m = len(obstacleGrid) n = len(obstacleGrid[0]) dp = [[0]*n for i in range(m)] for i in range(n-1,-1,-1): if obstacleGrid[m-1][i] == 1: break dp[m-1][i] = 1 for i in range(m-1,-1,-1): if obstacleGrid[i][n-1] == 1: break dp[i][n-1] = 1 for col in range(n-2,-1,-1): for row in range(m-2,-1,-1): if obstacleGrid[row][col] == 1: dp[row][col] = 0 # elif dp[row+1][col] == 0 or dp[row][col+1] == 0: # dp[row][col] = 0 else: dp[row][col] = dp[row+1][col] + dp[row][col+1] return dp[0][0] 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/unique-paths-ii/solution/jiu-shi-yu-dao-zhang-ai-jiu-ba-zhang-ai-twwhv/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
64 最小路径和
一个解法写三道题
又是被多数人击败的一天
class Solution: def minPathSum(self, grid: List[List[int]]) -> int: m = len(grid) n = len(grid[0]) dp = [[0]*n for i in range(m)] dp [m-1][n-1] = grid[m-1][n-1] for i in range(n-2,-1,-1): dp[m-1][i] = dp[m-1][i+1] + grid[m-1][i] for i in range(m-2,-1,-1): dp[i][n-1] = dp[i+1][n-1] + grid[i][n-1] for col in range(n-2,-1,-1): for row in range(m-2,-1,-1): dp[row][col] = min(dp[row+1][col],dp[row][col+1])+grid[row][col] return dp[0][0] 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/minimum-path-sum/solution/yi-ge-jie-fa-xie-san-dao-ti-by-yizhu-jia-b82k/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
、
65 有效数字
暴力解法
先看是不是小数(这里整数也属于小数)
再看有没有e
有e看前面是不是小数 后面是不是整数
class Solution: def isNumber(self, s: str) -> bool: def isint(s1): #看是不是整数 n = len(s1) if n == 0: #0长不算整数 return False if n == 1 and not s1[0].isnumeric(): #只有正负号 也不行 return False flag = True if not (s1[0] == '+' or s1[0] == '-' or s1[0].isnumeric()): #第一位必须是正负号数字中的一个 flag = False return flag for each in s1[1:]: if not each.isnumeric(): #判断后面的 如果都是数字 就是整数 flag = False break return flag def isdec(s2): #判断是不是小数 flag = 0 for each in s2: if each.isnumeric(): flag =1 break #必须存在一个数字才能是小数 全是符号不行 比如'.' '+.' if not flag: return False if isint(s2): #整数就是小数 return True if '.' not in s2: #不是整数 还没有小数点? 你是啥 return False pos = s2.rfind('.') s21 = s2[0:pos] s22 = s2[pos+1:] #拆成两部分 if not isint(s21) and len(s21)>0 and s21 != '+' and s21 != '-': return False #如果 前半部分不是空且不是整数且不是正负号 不用看后面了 if len(s22) == 0: return True #如果后半部分是空 也满足 if isint(s22) and s22[0].isnumeric(): #如果后半部分同时是不带正负号的整数 说明是小数 return True return False #主函数 if 'e' in s and 'E' in s: #Ee都在 再见 return False if isdec(s): #是小数 就是有效的 return True if 'e' in s: #找到e或者E的位置 找不到就再见 pos = s.rfind('e') elif 'E' in s: pos = s.rfind('E') else: return False s1 = s[0:pos] s2 = s[pos+1:] 分割两部分 前半部分是小数或者整数 后半部分是整数 if isdec(s1) and isint(s2): return True return False 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/valid-number/solution/bao-li-jie-fa-ji-bai-5cheng-ren-by-yizhu-3bvg/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
66 加1
从后往前找到第一个不是9的 把他加一 如果全是9 就在第一位插入1 其他变0
class Solution: def plusOne(self, digits: List[int]) -> List[int]: i = len(digits)-1 while i >= 0: if digits[i] != 9: digits[i] +=1 return digits else: digits[i] = 0 i -= 1 digits.insert(0,1) return digits 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/plus-one/solution/cong-hou-wang-qian-zhao-dao-di-yi-ge-bu-1vk05/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
67 二进制求和
暴力解
class Solution: def addBinary(self, a: str, b: str) -> str: n1 = len(a)-1 n2 = len(b)-1 carry = 0 rel = '' while n1 >= 0 or n2>=0: if n1 <0 : sum = int(b[n2]) +carry elif n2 <0: sum = int(a[n1]) +carry else: sum = int(a[n1])+int(b[n2]) +carry if sum == 0: rel += '0' carry = 0 if sum == 1: rel += '1' carry = 0 if sum == 2: rel += '0' carry = 1 if sum == 3: rel += '1' carry = 1 n1 -= 1 n2 -= 1 if carry == 1: rel += '1' return rel[::-1] 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/add-binary/solution/-by-yizhu-jia-kegx/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

浙公网安备 33010602011771号