欸嘿嘿!哈啰!大家好!没错就是Python,不要怀疑自己的眼睛XD,因为小弟我最近在练习用Python玩爬虫,所以可以看到发问了一些很菜的问题,也因为才刚学不久,所以想说来跳个tone,用新学的语言来尝试这个演算法系列!这样也像是呼应我前几篇说的,其实所有的语言都可以试着用自己的想法来解题!不过相信各位大大们已经在先前此系列的留言区看过各种语言解题了,我算是第一次做突破,那就开始正文!
题目名称:Jump Game
难易度:中
题目内容:输入一个阵列,起点为第一个位置,终点是阵列的最后一个位置,从起点开始,每一个位置的值代表可以前进的距离,只要判断能够到达终点或超过就回传True
,如果没办法的话就回传False
,需要注意的是如果第一个位置无法前进到终点,可以接着从下个位置的值开始,到的了终点的话一样回传True
,但如果下一个位置是0的话也无法再前进,所以回传False
(这题搞懂规则花了我很长的时间)。
例如:
1.传入以下阵列:
[2,6,1,1,4]
step1.起点位置0
的值为2所以可以前进到位置2
值为1。
step2.来到了位置2
的值为1所以可以前进到位置3
值为1。
step3.来到了位置3
的值为1所以可以前进到终点的位置4
。
所以会回传True。
2.传入以下阵列:
[3,2,1,0,4]
step1.起点位置0
的值为3,所以前进到位置3
但因为该值为0,无法再前进。
step2.起点位置0
的值无法到终点,所以从下一个位置1
开始,但因为值为2,还是会移动到位置3
,无法前进。
step3.上一位置1
的值无法到终点,所以从下一个位置2
开始,但因为值为1,还是会移动到位置3
,无法前进。
step4.上一位置2
的值无法到终点,所以从下一个位置3
开始,但因为值为0,无法前进。
因为不论从哪里开始,都无法跨过第一个0,所以会回传False。
接着是Python的解题初体验,说真的在解题的时候一直很有冲动换成简单等级的XD:
class Solution: def canJump(self, nums): '建立一个变数用来当目前在的位置' distance = 0 '跑迴圈' for index in range(len(nums)): """ 如果现在跑的位置比目前在的地方还大,那就失败了, 代表目前在的地方已经在个位置遇到0无法再往前了。 """ if index > distance: return False """ index是目前跑到第几个索引, nums[index]是目前这个索引的值,也就是这次可以移动的距离, 所以如果他目前到达的这个位置加上这次可以移动的距离, 就是下一次他会在的位置。 """ thisDistance = index + nums[index] '如果下一次会到的位置比目前在的位置还远就更新' if (thisDistance > distance): distance = thisDistance """ 更新完位置后,如果刚好到该阵列的最后一个位置或超过,就算成功。 """ if distance >= len(nums): return True '如果再迴圈内没有进到False就回传True' return True
接着分享一下执行成绩,大概48ms左右:
然后我真的很想要分享其他大大的解法,但是以我目前的程度实在还无法理解我看到讨论区的逻辑,所以原谅我这次没有分享其他高手的解法,但是我真的看到很厉害的简洁答案+.+,之后有机会我再把他补上来!还请各位大大见谅!也因为还不熟Python,不晓得以上会不会有更好的写法!如果有任何建议,或是有什么问题,再麻烦各位大大留言告诉我,我会尽快修正,也欢迎大家跟我一起来挑战各种题目XD,一个人很孤单,但是大家一起做就会觉得很酷!今天文章到这边,谢谢观赏
。