【发布时间】:2021-11-10 05:14:55
【问题描述】:
java新手,我在leecode中阅读了答案,它要求一个像[1,2,3]这样的数组并返回它的排列[1,3,2],[2,1,3].. ...并感到困惑,尤其是这段代码
Collections.swap(output, first, i);
backtrack(n, output, res, first + 1);
我不知道为什么使用 Collections.swap(output,first,i) 我认为在第一个循环中,第一个和 i 等于 0,所以为什么在这里使用交换。它们是相同的价值。这个递归实际上是做什么的,我调试它并无法弄清楚。代码如下:
package com.company;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class Main {
public static void main(String[] args) {
int[]arr=new int[]{1,2,3};
Main main1=new Main();
List<List<Integer>> lists = main1.permute(arr);
System.out.println(lists);
}
public List<List<Integer>> permute(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
List<Integer> output = new ArrayList<Integer>();
for (int num : nums) {
output.add(num);
}
int n = nums.length;
backtrack(n, output, res, 0);
return res;
}
public void backtrack(int n, List<Integer> output, List<List<Integer>> res, int first) {
if (first == n) {
res.add(new ArrayList<Integer>(output));
}
for (int i = first; i < n; i++) {
Collections.swap(output, first, i);
backtrack(n, output, res, first + 1);
Collections.swap(output, first, i);
}
}
}
【问题讨论】:
-
你问
Collections.swap做什么? -
@c0der 我对排列感到困惑,Navaneeth Sen 明确了 Collections.swap,但我不知道排列中的方法
-
Navaneeth Sen 明确 Collections.swap 如果 @Navaneeth Sen 的回答对您有帮助,请考虑对其进行投票。见stackoverflow.com/help/someone-answers
-
@c0der 好的,但我需要一些时间来阅读您的代码
-
每次我使用 backtrack(n, output, res, first + 1) 然后它转到函数 backtrck ,所以它是 Collections.swap(output, first, i);和拳头 =i 因为 for 循环中的“int i = first”。那么为什么要得到 [1,2,3] > 交换到 [1,3,2]。大声笑.....