https://leetcode.com/problems/frog-jump///受以下网页启发,用递归可行// https://discuss.leetcode.com/topic/59337/easy-version-java
public classSolution {
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= newHashMap();
Set st= newHashSet();
st.add(1);
mp.put(1, st);for (int i=2; i
Set newst= newHashSet();boolean isNewst = false;for (int j=1; 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
int dist = stones[i] - stones[pos];
if (dist >= step - 1 && dist <= step + 1) {
if (impl(i, dist)) {
return true;
}
}
}
return false;
}
}*/