代码随想录训练营 Day30
今日任务
回溯算法总结
332.重新安排行程
51.N皇后
37.解数独
语言:Java
332. 重新安排行程
链接:https://leetcode.cn/problems/reconstruct-itinerary/
为何这次的回溯函数需要返回的是boolean?
在以往的回溯操作中,我们需要返回的是全部结果,题目要求的返回类型也是二维数组,但此题中只要求返回“最小”的结果,所以我们需要及时停止回溯,当当前path的长度已经满足要求时返回true结束回溯函数,相当于在之前的回溯题中得到第一个结果就及时停下而不再关心后续的结果。
class Solution {
List<String> result;
//List<List<String>> result2 = new ArrayList<List<String>>();
List<String> path = new ArrayList<String>();
int[] used;
public boolean backTracking(List<List<String>> tickets){
if(path.size() == tickets.size() + 1){
result = new ArrayList(path);
//result2.add(new ArrayList(path));
return true;
}
for(int i = 0; i < tickets.size(); i++){
if(used[i] == 0 && tickets.get(i).get(0).equals(path.get(path.size() - 1))){
path.add(tickets.get(i).get(1));
used[i] = 1;
//此时已经找到第一组结果,及时退出回溯过程
if(backTracking(tickets)){
return true;
}
used[i] = 0;
path.remove(path.size() - 1);
}
}
// 如果跳出了for循环说明我们此时还未找到第一组结果
return false