任务7

作者: mying_三丘 | 来源:发表于2019-03-16 21:23 被阅读0次

    leetcode64. 最小路径和

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

    说明:每次只能向下或者向右移动一步。
    技巧:不用递归,原地更新该位置的最小路径和

    class Solution:
        
        def minPathSum(self, grid: List[List[int]]) -> int:
            if not grid:
                return
            num1 = len(grid)
            num2 = len(grid[0])
            if num1==1:
                return sum(grid[0])
            sum1=0
            if num2==1:
                for i in range(0,num2):
                    sum1=sum1+grid[i][0]
                return sum1
            for i in range(1,num2):
                grid[0][i]=grid[0][i-1]+grid[0][i]
            for j in range(1,num1):
                grid[j][0]=grid[j-1][0]+grid[j-1][0]
            for i in range(2,num1):
                for j in range(2,num2):
                    if grid[i-1][j]<=grid[i][j-1]:
                        grid[i][j]=grid[i-1][j]+grid[i][j]
                    else:
                        grid[i][j]=grid[i][j-1]+grid[i][j]
            return grid[num1-1][num2-1]
    

    leetcode322. 零钱兑换

    给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。

    class Solution {
    public:
        int coinChange(vector<int>& coins, int amount) {
            vector<int> dp(amount+1,-1);
            sort(coins.begin(),coins.end());
            dp[0]=0;
            for(int i=1;i<=amount;i++){
                for(int j=0;j<coins.size();j++){
                    if(coins[j]>i)
                        break;
                    if(dp[i-coins[j]]!=-1){
                        if(dp[i]==-1 ||dp[i]>dp[i-coins[j]]+1){
                            dp[i]=dp[i-coins[j]]+1;
                        }
                    }
                }
            }
            return dp[amount];
        }
        
    };
    

    leetcode70. 爬楼梯

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

    每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

    class Solution:
        def climbStairs(self, n: int) -> int:
            if n==1 or n==0:
                return 1
            elif n==2:
                return 2
            else:
                return self.climbStairs(n-1)+self.climbStairs(n-2)
    

    leetcode46. 全排列

    给定一个没有重复数字的序列,返回其所有可能的全排列。

    class Solution:
        def permute(self, nums: List[int]) -> List[List[int]]:
            from itertools import permutations
            return list(permutations(nums))
    

    相关文章

      网友评论

          本文标题:任务7

          本文链接:https://www.haomeiwen.com/subject/mzremqtx.html