class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型vector 
     * @return int整型
     */
    int minJumpStep(vector<int>& nums) {
        int n = nums.size();
        if(n == 0) {
            return -1;
        }
        if(n == 1){
            return 0;
        }
        vector<int> dp(n, -1); //表示到达下标位置所需要的最小步数
        dp[0] = 0;
        vector<bool> used(n, false);  //表示是否到达下标所在位置
        used[0] = true;
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j <= i + nums[i] && j < n; j++) {
                if(!used[j]) {
                    dp[j] = dp[i] + 1;
                    used[j] = true;
                    if(j == n-1){
                        return dp[j];
                    }
                }
            }
            if(dp[i] == -1) { //无法到达i位置
                break;
            }
        }
        return -1;
    }
};