给出一个非负整数数组,你最初在数组第一个元素的位置
数组中的元素代表你在这个位置可以跳跃的最大长度
你的目标是用最少的跳跃次数来到达数组的最后一个元素的位置
例如
给出数组 A =[2,3,1,1,4]
最少需要两次才能跳跃到数组最后一个元素的位置。(从数组下标为0的位置跳长度1到达下标1的位置,然后跳长度3到数组最后一个元素的位置)
思路:两种解法
1)每个位置都是前面某个位置多走一步到达,类似于动态规划
func jump( A []int ) int {
// write code here
num := len(A)
ret := make([]int, num)
ret[0] = 0
for i := 1; i < num; i ++ {
for j := 0; j < i; j ++ {
if A[j] >= i - j && (ret[i] == 0 || ret[i] > ret[j] + 1) {
ret[i] = ret[j] + 1
}
}
}
return ret[num - 1]
}
2)记录每一个位置能到后面哪个位置
package main
/**
*
* @param A int整型一维数组
* @return int整型
*/
func jump( A []int ) int {
// write code here
num := len(A)
res := make([]int, num)
res[0] = 0
for i := 0; i < num; i++ {
for j := i + 1; j <= i+A[i] && j < num; j++ {
if !(res[j] > 0 && res[j] < res[i]+1) {
res[j] = res[i] + 1
}
}
}
return res[num-1]
}