diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 207e055..09733f1 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -2,9 +2,10 @@
-
-
+
+
+
@@ -74,13 +75,13 @@
-
+
-
+
-
+
@@ -89,11 +90,11 @@
-
+
-
+
@@ -128,11 +129,11 @@
-
+
-
+
@@ -168,11 +169,11 @@
+
+
+
-
-
-
@@ -210,7 +211,8 @@
-
+
+
1580045439607
@@ -254,7 +256,14 @@
1580409713059
-
+
+ 1580496640692
+
+
+
+ 1580496640692
+
+
@@ -267,76 +276,77 @@
-
+
+
-
+
-
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/src/q236/Solution.java b/src/q236/Solution.java
index 110b063..e1751ab 100644
--- a/src/q236/Solution.java
+++ b/src/q236/Solution.java
@@ -1,7 +1,7 @@
package q236;
/**
- * LCA二叉树的最近公共祖先(递归)
+ * LCA二叉树的最近公共祖先(递归)o(n)
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
diff --git a/src/q46/f1/Solution.java b/src/q46/f1/Solution.java
new file mode 100644
index 0000000..d70377e
--- /dev/null
+++ b/src/q46/f1/Solution.java
@@ -0,0 +1,41 @@
+package q46.f1;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 插队法 o((n-1)!+(n-2)!+···+2!+1!)
+ */
+public class Solution {
+ public List> fc(List> nums, int c) {
+ List> result = new ArrayList<>();
+ for (int i = 0; i < nums.size(); i++) {
+ for (int j = 0; j <= nums.get(i).size(); j++) {
+ List temp = new ArrayList<>(nums.get(i));
+ temp.add(j, c);
+ result.add(temp);
+ }
+ }
+ return result;
+ }
+
+ public List> permute(int[] nums) {
+ List> result = new ArrayList<>();
+ if (nums.length == 0) {
+ return result;
+ }
+ List to = new ArrayList<>();
+ to.add(nums[0]);
+ result.add(to);
+ for (int i = 1; i < nums.length; i++) {
+ result = fc(result, nums[i]);
+ }
+ System.out.println(result);
+ return result;
+ }
+
+ public static void main(String[] args) {
+ new Solution().permute(new int[]{1, 2, 3});
+ //4—>3!+2!+1!
+ }
+}
diff --git a/src/q46/f2/Solution.java b/src/q46/f2/Solution.java
new file mode 100644
index 0000000..7849f3a
--- /dev/null
+++ b/src/q46/f2/Solution.java
@@ -0,0 +1,52 @@
+package q46.f2;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 回溯法(DFS深度优先遍历) o(n*n!)
+ */
+public class Solution {
+
+ public List> permute(int[] nums) {
+ int len = nums.length;
+
+ List> res = new ArrayList<>();
+
+ if (len == 0) {
+ return res;
+ }
+
+ boolean[] used = new boolean[len];
+ List path = new ArrayList<>();
+
+ dfs(nums, len, 0, path, used, res);
+ return res;
+ }
+
+ private void dfs(int[] nums, int len, int depth,
+ List path, boolean[] used,
+ List> res) {
+ if (depth == len) {
+ res.add(new ArrayList<>(path));
+ return;
+ }
+
+ for (int i = 0; i < len; i++) {
+ if (!used[i]) {
+ path.add(nums[i]);
+ used[i] = true;
+ dfs(nums, len, depth + 1, path, used, res);
+ // 状态重置,是从深层结点回到浅层结点的过程,代码在形式上和递归之前是对称的
+ used[i] = false;
+ path.remove(depth);
+ }
+ }
+ }
+
+ public static void main(String[] args) {
+ int[] nums = {1, 2, 3};
+ Solution solution = new Solution();
+ List> lists = solution.permute(nums);
+ }
+}