[关闭]
@XQF 2018-03-07T15:01:47.000000Z 字数 2356 阅读 860

深度对比深度优先----全排列例子

数据结构与算法


1.使用ArrayList保存item

  1. public static void dfs(int[] nums, int[] book, int step, ArrayList<Integer> item) {
  2. if (step == nums.length) {
  3. System.out.println(Arrays.toString(item.toArray()));
  4. return;
  5. }
  6. for (int i = 0; i < nums.length; i++) {
  7. if (book[i] == 0) {
  8. item.add(nums[i]);
  9. book[i] = 1;
  10. dfs(nums, book, step + 1, item);
  11. book[i] = 0;
  12. // item.remove(item.size() - 1);
  13. }
  14. }
  15. }

输出是:

[1, 2, 3, 4]
[1, 2, 3, 4, 4, 3]
[1, 2, 3, 4, 4, 3, 3, 2, 4]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1, 4, 1, 3]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1, 4, 1, 3, 3, 1]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1, 4, 1, 3, 3, 1, 3, 1, 2, 4]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1, 4, 1, 3, 3, 1, 3, 1, 2, 4, 4, 2]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1, 4, 1, 3, 3, 1, 3, 1, 2, 4, 4, 2, 2, 1, 4]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1, 4, 1, 3, 3, 1, 3, 1, 2, 4, 4, 2, 2, 1, 4, 4, 1]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1, 4, 1, 3, 3, 1, 3, 1, 2, 4, 4, 2, 2, 1, 4, 4, 1, 4, 1, 2]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1, 4, 1, 3, 3, 1, 3, 1, 2, 4, 4, 2, 2, 1, 4, 4, 1, 4, 1, 2, 2, 1]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1, 4, 1, 3, 3, 1, 3, 1, 2, 4, 4, 2, 2, 1, 4, 4, 1, 4, 1, 2, 2, 1, 4, 1, 2, 3]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1, 4, 1, 3, 3, 1, 3, 1, 2, 4, 4, 2, 2, 1, 4, 4, 1, 4, 1, 2, 2, 1, 4, 1, 2, 3, 3, 2]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1, 4, 1, 3, 3, 1, 3, 1, 2, 4, 4, 2, 2, 1, 4, 4, 1, 4, 1, 2, 2, 1, 4, 1, 2, 3, 3, 2, 2, 1, 3]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1, 4, 1, 3, 3, 1, 3, 1, 2, 4, 4, 2, 2, 1, 4, 4, 1, 4, 1, 2, 2, 1, 4, 1, 2, 3, 3, 2, 2, 1, 3, 3, 1]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1, 4, 1, 3, 3, 1, 3, 1, 2, 4, 4, 2, 2, 1, 4, 4, 1, 4, 1, 2, 2, 1, 4, 1, 2, 3, 3, 2, 2, 1, 3, 3, 1, 3, 1, 2]
[1, 2, 3, 4, 4, 3, 3, 2, 4, 4, 2, 4, 2, 3, 3, 2, 2, 1, 3, 4, 4, 3, 3, 1, 4, 4, 1, 4, 1, 3, 3, 1, 3, 1, 2, 4, 4, 2, 2, 1, 4, 4, 1, 4, 1, 2, 2, 1, 4, 1, 2, 3, 3, 2, 2, 1, 3, 3, 1, 3, 1, 2, 2, 1]

因为ArrayList对象一直是持有引用,要是不remove掉里面的数据相当于是内存泄漏了

2.数组存放数据

  1. public static void dfs1(int[] nums, int[] book, int step, int[] result) {
  2. if (step == nums.length) {
  3. System.out.println(Arrays.toString(result));
  4. return;
  5. }
  6. for (int i = 0; i < nums.length; i++) {
  7. if (book[i] == 0) {
  8. result[step] = nums[i];
  9. book[i] = 1;
  10. dfs1(nums, book, step + 1, result);
  11. book[i] = 0;
  12. // result[step]=0;
  13. }
  14. }
  15. }

注释与不注释掉那一句都是无所谓的。

step只是起以一个记步的作用

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注