172- 189 哈哈哈 看起来好多 但是好多数据库的题 对不起 和你说拜拜
172 阶乘后的 0 :
0是由 2和5来的 2很多 所以数5的个数就行
25有多少个5呢 25自己是2 20 15,10, 5 都是1个
125有多少5呢 ? 125自己是3个 100,75,50,25 都是2个 其他的5的倍数都是1个
class Solution: def trailingZeroes(self, n: int) -> int: i = 1 while 5 ** i <= n: i += 1 # n 是比 5的 i-1 方大的整数 sum = 0 #统计有多少位 for each in range(i-1, 0, -1): count =( n // (5 ** each) - n//5**(each+1)) * each sum += count return sum 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/factorial-trailing-zeroes/solution/wo-yi-wei-wo-fang-fa-hen-qiang-ni-23333-hoe1z/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
173 : 二叉搜索树迭代器
好像是简单题 但我不会
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class BSTIterator: def __init__(self, root: TreeNode): self.data = [] self.enqueue(root) def enqueue(self, root): while root: self.data.append(root) root = root.left def next(self) -> int: res = self.data.pop() self.enqueue(res.right) return res.val def hasNext(self) -> bool: return bool(self.data) # Your BSTIterator object will be instantiated and called as such: # obj = BSTIterator(root) # param_1 = obj.next() # param_2 = obj.hasNext() 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/binary-search-tree-iterator/solution/bu-dong-a-bu-dong-by-yizhu-jia-iv7h/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
174 :地下城游戏 。
回溯再次超时
你怎么 又超时了呢 ???
dp发现不能用的时候 要转换思路 想想dp表格中的值的代表含义是不是可以变一变 也许就变通了呢 ?
然后可以外面加行列避免边界特殊情
class Solution: def calculateMinimumHP(self, dungeon: List[List[int]]) -> int: row, col = len(dungeon) ,len(dungeon[0]) dp = [[float('inf')] * (col+1) for each in range(row+1)] dp[row][col-1] =dp[row-1][col]= 1 for i in range(row-1, -1, -1): for j in range(col-1, -1, -1): dp[i][j] = max(min(dp[i+1][j], dp[i][j+1]) - dungeon[i][j] , 1) return dp[0][0] 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/dungeon-game/solution/hui-su-wu-wu-wu-wo-de-hui-su-by-yizhu-ji-txrv/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
188 : 买股票的最佳时机 。
z瞻前顾后 前车之鉴 后事之师
模仿前面的代码 写出了这次的代码
class Solution: def maxProfit(self, k: int, prices: List[int]) -> int: n = len(prices) if n == 0 or k == 0: return 0 dp = [[[0]*(k+1) for i in range(2)] for j in range(n)] for j in range(2): for each in range(1,k+1): dp[0][j][each] = float('-inf') dp[0][1][0] = -prices[0] for i in range(1,n): dp[i][0][0] = 0 dp[i][1][0] = max(dp[i-1][0][0]-prices[i],dp[i-1][1][0]) for each in range(1,k+1): dp[i][0][each] = max(dp[i-1][1][each-1]+prices[i],dp[i-1][0][each]) dp[i][1][each] = max(dp[i-1][0][each]-prices[i], dp[i-1][1][each]) if each == k: dp[i][1][each] = float('-inf') return max(dp[n-1][0]) 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iv/solution/zzhan-qian-gu-hou-qian-che-zhi-jian-hou-1ou18/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
189 旋转数组
三次反转的经典题目
class Solution: def rotate(self, nums: List[int], k: int) -> None: """ Do not return anything, modify nums in-place instead. """ n = len(nums) k = k % n nums[:] = list(reversed(nums)) nums[0:k]= list(reversed(nums[0:k])) nums[k:] = list(reversed(nums[k:])) return nums 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/rotate-array/solution/san-ci-fan-zhuan-jing-dian-ti-mu-by-yizh-kydg/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
拜拜就拜拜 下一个更难。