[leetcode-332]Reconstruct Itinerary(java)
2016-03-30 23:21
447 查看
原题:这里写链接内容
分析:这到头应该使用DFS进行搜索。尽管写过很多次递归程序,可是每次遇到他还是觉得很发憷,递归的过程中要注意两个点,一个是边界点,一个是状态恢复的过程。
分析:这到头应该使用DFS进行搜索。尽管写过很多次递归程序,可是每次遇到他还是觉得很发憷,递归的过程中要注意两个点,一个是边界点,一个是状态恢复的过程。
public class Solution { HashMap<String,List<String>> maps; int count; public List<String> findItinerary(String[][] tickets) { maps = new HashMap<>(); initHashMap(tickets); count = tickets.length+1; List<String> res = new LinkedList<>(); res.add("JFK"); dfs(res); return res; } private boolean dfs(List<String> res){ if(res.size() == count) return true; String top = res.get(res.size()-1); List<String> lists = maps.get(top); if(lists == null) return false; for(int i = 0;i<lists.size();i++){ String tmp = lists.get(i); res.add(tmp); lists.remove(i); if(dfs(res))//当找到合适点之后,直接返回true return true; lists.add(i,tmp);//恢复现场 res.remove(res.size()-1); } return false; } private void initHashMap(String[][] tickets){ for(String[] tmp:tickets){ String from = tmp[0]; String to = tmp[1]; if(!maps.containsKey(from)){ maps.put(from,new LinkedList<>()); } List<String> list = maps.get(from); int index = 0; int size = list.size(); while(index < size){ String cur = list.get(index); if(cur.compareTo(to) >= 0){ break; } index++; } list.add(index,to); } } }
相关文章推荐
- Java设计模式之单例模式
- Spring JDBC学习笔记(2):JdbcTemplate的增强版NamedParameterJdbcTemplate
- 将Windows文件路径转换为java中可识别的文件路径
- Java泛型深入理解
- Java 异常
- java中Comparator接口
- java 垃圾回收机制
- java SE基础(Map接口及其实现)
- java.lang.OutOfMemoryError: PermGen space及其解决方法
- spring data jpa 操作JPA 2.0原生api
- Java 多线程实现的三种方法,附两个线程执行不同的输出
- Java SE 疑难点记录
- Java 1.7 ReentrantReadWriteLock源码解析
- Java并发编程:阻塞队列
- java学习之迭代器浅谈
- Struts1与Struts2原理 区别 详解 汇总
- 学习javaEE每一天2016.3.30
- JavaMail发送邮件
- java获取当前时间的年周月季度等的开始结束时间
- java读取配置中文乱码