实现代码如下:
/**
* 递归获取全排列
*/
private void fullyArranged(List<List<Integer>> fullyArranged, List<Integer> tmp, int[] nums, boolean[] isVisited)
{
if (tmp.size() == nums.length)
{
fullyArranged.add(new ArrayList<>(tmp));
return;
}
for (int i = 0; i < nums.length; i++)
{
if (isVisited[i])
{
continue;
}
isVisited[i] = true;
tmp.add(nums[i]);
fullyArranged(fullyArranged, tmp, nums, isVisited);
isVisited[i] = false;
tmp.remove(tmp.size() - 1);
}
}
/**
* 全排列、回溯算法
* @param nums
* @return
*/
private List<List<Integer>> permute(int[] nums)
{
List<List<Integer>> fullyArranged = new ArrayList<>();
fullyArranged(fullyArranged, new ArrayList<>(), nums, new boolean[nums.length]);
return fullyArranged;
}
@Test
public void test()
{
int[] nums = {1, 2, 3};
System.out.println("result = " + permute(nums));
}
fullyArranged.add(new ArrayList<>(tmp))原来是fullyArranged.add(tmp)这么写的。
之后打印结果的时候发现fullyArranged是空的。
所以就有了一些关于Java值传递以及引用传递的一些感想。
基本类型为值传递,其他类型为引用传递。记住这句话就已经可以解决Java值传递以及引用传递的绝大部分问题了。