由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 求讨论关于Leetcode的WordLadder I的DFS解法
相关主题
leetcode出了新题word ladderleetcode做伤心了
Leetcode word ladder 求助!M的面试题
请教word ladder| |leetcode wordladder2 求助!(solved)
转划单词题的优解请教word ladder解法,大test超时
Time limit exceeded for Word Ladder(leetcode)这个题能有几种解法?
IF语句&&前后换个顺序就超时!!!搞笑啊!!!leetcode word break II DFS 超时
word ladder能只用一个queue搞定吗?请教leetcode上的那道Word Break II,多谢!
请教一下,leetcode surrounded regions这题为什么我的代码会超时这段word ladder II怎么改?
相关话题的讨论汇总
话题: string话题: level话题: dataset话题: value话题: str
进入JobHunting版参与讨论
1 (共1页)
i*********7
发帖数: 348
1
这一题大部分人应该都知道是用BFS解。
我只是想自己试验一下DFS的解。
DFS解如果要避免TLE,重点在于需要截枝和截枝后的答案更新。
这就是我自己新建一个class和对应的HashMap去记录进行截枝。
我的观念是这个样子的,在遇到重复出现过的节点单词的时候,首先考虑的是这个节点
往下遍历过后是否出现过解,如果没有的话只有两种情况:1,这个节点往下走是没有
解的。(在不变回去的情况下)2.变回去了。 这种情况下都当做无效访问往上一层走。
如果有的话,就比较该节点之前有解的情况下它所居的递归层数是否比当前重复访问的
时候深,如果否,则不更新,如果是,则根据层数差来修正结果。这相当于把之前遍历
过的结果默认放在这一层下面了。
好吧,问题来了。。这个解只能过leetcode 80%的cases。在一个字典很大的case中比
Expected answer多了1. 有没有人能告诉我听我的代码或者逻辑问题出在哪儿了?=。=
class DataSet{
int level, res;
DataSet(){
level = 0;
res = Integer.MAX_VALUE;
}
DataSet(int level){
this();
this.level = level;
}
}

public int ladderLength(String start, String end, Set dict) {
char[] start_arr = start.toCharArray();
Map marked = new HashMap();
int res = ladderlength(start_arr, end, dict, marked, 1);
return res == Integer.MAX_VALUE ? 0 : curmin;
}
int curmin = Integer.MAX_VALUE;

public int ladderlength(char[] start, String end, Set dict, Map<
String, DataSet> marked, int level){
String str = new String(start);
if(str.equals(end))
return level;
if(level > curmin)
return Integer.MAX_VALUE;
if(marked.containsKey(str)){
if(marked.get(str).res == Integer.MAX_VALUE)
return Integer.MAX_VALUE;
else{
if(marked.get(str).level < level)
return marked.get(str).res;
else{
marked.get(str).res = marked.get(str).res - (marked.get(
str).level - level);
marked.get(str).level = level;
return marked.get(str).res;
}
}
}
DataSet level_data = new DataSet(level);
marked.put(str, level_data);
int min = Integer.MAX_VALUE;
for(int i = 0; i < start.length; i++){
char tmp = start[i];
int minlevel = Integer.MAX_VALUE;
for(char j = 'a'; j <= 'z'; j++){
start[i] = j;
String tmpstr = new String(start);
if(dict.contains(tmpstr) && start[i] != tmp){
minlevel = Math.min(ladderlength(start, end, dict,
marked, level + 1), minlevel);
curmin = Math.min(curmin, minlevel);
}
}
start[i] = tmp;
min = Math.min(min, minlevel);
}
level_data.res = min;
return min;
}
1 (共1页)
进入JobHunting版参与讨论
相关主题
这段word ladder II怎么改?Time limit exceeded for Word Ladder(leetcode)
一道google电面题,估计挂了。。。IF语句&&前后换个顺序就超时!!!搞笑啊!!!
请问一道题word ladder能只用一个queue搞定吗?
G家已跪,发个面经请教一下,leetcode surrounded regions这题为什么我的代码会超时
leetcode出了新题word ladderleetcode做伤心了
Leetcode word ladder 求助!M的面试题
请教word ladder| |leetcode wordladder2 求助!(solved)
转划单词题的优解请教word ladder解法,大test超时
相关话题的讨论汇总
话题: string话题: level话题: dataset话题: value话题: str