Golang:
思路:这题挺有意思的,但并不是在于它的难度上,还是解题的思路上。目前我实现的是思路一:从前往后对数组做处理,但实现的效率极低,大概时间复杂度15%,空间复杂度15%左右。所以更高效的应该是思路二:使用迭代去实现一种类似回溯的方法,对数组进行从后往前的处理。后面我实现了思路二,程序效率如下:
下面着重讲下思路二,这里有个前提,即这个问题是可以分解成子问题的。举例分析,我们从arr[i]
可以到达终点,那么能否到达终点这个问题就变成了能否到达arr[i]
这个问题了。当一个问题可以被分解,那么迭代就有了可行性。
Emmm,对于陌生的题,我会先选择最熟悉的JAVA去写,后面才会用Go去复写,所以上面的提交图是JAVA的。下面给出Go语言实现的代码:
func canJump(nums []int) bool {
if len(nums)==1{
return true
}
return goBack(nums,len(nums)-1)
}
func goBack(nums []int,length int) bool{
for i:=length-1; i>=-1; i-- {
//无解,终止迭代
if i==-1 {
return false
}
if i+nums[i]>=length {
//找到解,终止迭代
if i==0 {
return true
}
return goBack(nums,i)
}
}
return false
}
Ps:这题用Go复写后效率极低!!!
有疑问加站长微信联系(非本文作者)