leetcode(25,26,27)-跳躍遊戲,合併區間,不同路徑
阿新 • • 發佈:2020-09-10
跳躍遊戲
給定一個非負整數陣列,你最初位於陣列的第一個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最後一個位置。
貪心演算法
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]