zoukankan      html  css  js  c++  java
  • 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;
        }
    }
    */
  • 相关阅读:
    Python 操控Mysql
    mysql5.7 root密码重置
    pandas合并两个excel到一个excel
    键盘控制
    激活浏览器窗口
    python的xlwings库读写excel操作总结
    python 读取Excel使用xlwing库
    CMDB(资产管理系统) day1
    Vue之简易的留言板功能
    vue之神奇的动态按钮
  • 原文地址:https://www.cnblogs.com/charlesblc/p/5891256.html
Copyright © 2011-2022 走看看