frog-jump

https://leetcode.com/problems/frog-jump/

// 受以下网页启发,用递归可行
// https://discuss.leetcode.com/topic/59337/easy-version-java

public class Solution {
    Map mp;
    private int[] stones;
    public boolean canCross(int[] s) {
        stones = s;
        
        if (stones[1] != 1) {
            return false;
        }
        if (stones.length < 3) {
            return true;
        }
        mp = new HashMap();
        Set st = new HashSet();
        st.add(1);
        mp.put(1, st);
        for (int i=2; i<stones.length; i++) {
            Set newst = new HashSet();
            boolean isNewst = false;
            
            for (int j=1; j<i; j++) {
                Object obj = mp.get(j);
                if (obj == null) {
                    continue;
                }
                Set tmpst = (Set) obj;
                int dist = stones[i] - stones[j];
                
                for (int k=-1; k<=1; k++) {
                    if (tmpst.contains(dist+k)) {
                        newst.add(dist);
                        isNewst = true;
                    }
                }
            }
            
            if (isNewst) {
                mp.put(i, newst);
            }
        }
        
        if (mp.get(stones.length-1) != null) {
            return true;
        }
        else {
            return false;
        }
    }
    
}

/*
// 以下解法复杂性太高
public class Solution {
    private int[] stones;
    public boolean canCross(int[] s) {
        stones = s;
        
        if (stones[1] != 1) {
            return false;
        }
        if (stones.length < 3) {
            return true;
        }
        return impl(1, 1);
    }
    
    boolean impl(int pos, int step) {
        if (pos == stones.length - 1) {
            return true;
        }
        for (int i=pos+1; i<stones.length; i++) {
            int dist = stones[i] - stones[pos];
            if (dist >= step - 1 && dist <= step + 1) {
                if (impl(i, dist)) {
                    return true;
                }
            }
        }
        return false;
    }
}
*/
原文地址:https://www.cnblogs.com/charlesblc/p/5891256.html