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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

 

拜拜就拜拜 下一个更难。 

 

posted @ 2022-03-26 21:08  yi术家  阅读(23)  评论(0编辑  收藏  举报