
方法1: backtracking。但是会tle,我思考了下可以用memoization来优化,但是我的backtracking function需要返回list,存答案。我不高兴改了,所以这道题现在还是attempted,复盘的时候再去实现一下吧。
class Solution {
public List<String> wordBreak(String s, List<String> wordDict) {
StringBuilder path = new StringBuilder();
List<String> res = new ArrayList<>();
backtracking(s, wordDict, 0, path, res);
return res;
}
public void backtracking(String s, List<String> wordDict, int start, StringBuilder path, List<String> res){
if(start == s.length()){
StringBuilder ans = new StringBuilder(path);
ans.deleteCharAt(ans.length()-1);
res.add(ans.toString());
return;
}
for(int i = start; i < s.length(); i++){
String subString = s.substring(start, i+1);
if(wordDict.contains(subString)){
path.append(subString + ' ');
backtracking(s, wordDict, i+1, path, res);
path.delete(path.length()-subString.length()-1, path.length());
}
}
}
}
总结:
- 无
本文探讨了一种优化策略,通过memoization技术改进backtracking算法以解决字符串单词拆分问题。重点在于如何在回溯过程中存储并重用已计算的答案,以避免重复计算,提高LeetCode 'wordBreak' 题目的解题效率。
1610

被折叠的 条评论
为什么被折叠?



