Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ca1bf0f

Browse files
author
lkxyyjx
committed
no message
1 parent dd60b07 commit ca1bf0f

File tree

4 files changed

+63
-17
lines changed

4 files changed

+63
-17
lines changed

.idea/leetCode.iml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/workspace.xml

Lines changed: 12 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,8 @@
88
- 找出状态转移方程后,再明确base condition(或者说是边界条件),这个时候dp问题如何解决一般就非常明晰了
99
- 实现细节
1010
- 可以基于【选择】去循环计算出每一个状态,也可以基于【状态参数】去循环计算出每一个状态
11-
- 递归实现时,需要避免重复的状态计算,避免多余的计算和减少调用栈,可以设置一个数组保存已经计算过的【状态】
11+
- 递归实现时,需要避免重复的状态计算,避免多余的计算和减少调用栈,可以设置一个数组保存已经计算过的【状态】
12+
## 回溯问题的一般思路与解法
13+
- 找到问题的一般过程与边界条件,使用递归实现时先确定递归参数,注意留意过程中的对象变量
14+
- 明确哪些操作是要递归前完成的,哪些操作是需要在递归后完成的
15+
- 递归实现时,如果担心调用栈过长或者理不清递归逻辑,过程可以使用循环+stack替代实现

src/046/S046.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import java.util.ArrayList;
2+
import java.util.List;
3+
4+
public class S046 {
5+
6+
private List<List<Integer>> res;
7+
private int[] nums;
8+
9+
public List<List<Integer>> permute(int[] nums) {
10+
res = new ArrayList<>();
11+
this.nums = nums;
12+
boolean[] used = new boolean[nums.length];
13+
List<Integer> singleRes = new ArrayList<>();
14+
dfs(used, singleRes);
15+
return res;
16+
}
17+
18+
public void dfs(boolean[] used, List<Integer> res) {
19+
if(res.size() == nums.length) {
20+
this.res.add(new ArrayList<>(res));
21+
return;
22+
}
23+
for (int i = 0; i < used.length; i ++) {
24+
if (used[i]) continue;
25+
used[i] = true;
26+
res.add(nums[i]);
27+
dfs(used, res);
28+
used[i] = false;
29+
res.remove(res.size() - 1);
30+
}
31+
}
32+
33+
public static void main(String[] str) {
34+
S046 solution = new S046();
35+
int[] nums = new int[] {1,2,3};
36+
List<List<Integer>> res;
37+
res = solution.permute(nums);
38+
for(int j = 0; j < res.size(); j ++) {
39+
System.out.println("sequence:");
40+
for (int i = 0; i < nums.length; i++) {
41+
System.out.println(res.get(j).get(i));
42+
}
43+
}
44+
}
45+
}

0 commit comments

Comments
 (0)