1. 程式人生 > 實用技巧 >leetcode(25,26,27)-跳躍遊戲,合併區間,不同路徑

leetcode(25,26,27)-跳躍遊戲,合併區間,不同路徑

跳躍遊戲

給定一個非負整數陣列,你最初位於陣列的第一個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最後一個位置。

貪心演算法

class Solution:
    def canJump(self, nums) :
        max_i = 0       #初始化當前能到達最遠的位置
        for i, jump in enumerate(nums):   #i為當前位置,jump是當前位置的跳數
            if max_i>=i and i+jump>max_i:  #如果當前位置能到達,並且當前位置+跳數>最遠位置  
                max_i = i+jump  #更新最遠能到達位置
        return max_i>=i

作者:mo-lan-4
連結:https://leetcode-cn.com/problems/jump-game/solution/pythonji-bai-97kan-bu-dong-ni-chui-wo-by-mo-lan-4/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

合併區間

給出一個區間的集合,請合併所有重疊的區間。

示例 1:

輸入: intervals = [[1,3],[2,6],[8,10],[15,18]]

輸出: [[1,6],[8,10],[15,18]]

解釋: 區間 [1,3] 和 [2,6] 重疊, 將它們合併為 [1,6].

連結:https://leetcode-cn.com/problems/merge-intervals

class Solution:
    def merge(self, intervals):
        ls = sorted(intervals, key = lambda x:x[0])
        ln = len(ls)
        print(ls)
        for i, data in enumerate(ls[:-1]):
            if ls[i+1][0]<=ls[i][1]:
                ls[i+1][0] = ls[i][0]
                ls[i+1][1] = max(ls[i+1][1],ls[i][1])
                ls[i] = None
        return [each for each in ls if each is not None]
s = Solution()

不同路徑

一個機器人位於一個 m x n 網格的左上角 (起始點在下圖中標記為“Start” )。

機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為“Finish”)。

問總共有多少條不同的路徑?

連結:https://leetcode-cn.com/problems/unique-paths

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        f = [0 for _ in range(m)]
        f[0] = 1
        for i in range(0,n):
            for j in range(1,m):
                f[j] += f[j-1]
        return f[m-1]