# Leetcode 55. Jump Game [Leetcode 55. Jump Game](https://leetcode.com/problems/jump-game/description/) (<font color="#FFB800"> Medium</font> 通過率: 38.5%) ## 限制條件 <ul> <li>1 <= nums.length <= 10^4</li> <li>0 <= nums[i] <= 10^5</li> </ul> ### 解法 1 用遞迴的方式寫,逐步找出最後能不能走到。走不到就將逐步走過的點都設定成不能到,這樣可以加快一點速度。 - 時間複雜度: $O(n^2)$ - 空間複雜度: $O(n)$ ```cpp!= class Solution { public: bool isJump(vector<int>& nums, int index, vector<bool>& record) { if(index == nums.size() - 1) return true; else { for(int i = index + 1; i < nums.size() && i <= index + nums[index] ; i++) { if(record[i] == true) continue; if(isJump(nums, i, record) == true) return true; else record[i] = true; } } return false; } bool canJump(vector<int>& nums) { vector <bool> record(nums.size()); return isJump(nums, 0, record); } }; ``` ### 解法 2 用一變數 max_index 來代表某一步之下,能夠走到最遠的距離。用迴圈的方式找在 max_index 之前能不能再找到更大的變數,如果沒有就 return false。如果可以順利走到最後就 return true。 - 時間複雜度: $O(n)$ - 空間複雜度: $O(1)$ ```cpp!= class Solution { public: bool canJump(vector<int>& nums) { int max_index = nums[0]; for(int i=0;i</int></bool></int></bool></int>
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up