问题描述
我建立了一个递归方法,该方法应该打印一个数组的所有排列,但它只打印第一个选项。
这是代码:
public static void printPermutation(int [] nums,int index,int [] print_arr) {
if(index == nums.length) {
System.out.println(Arrays.toString(print_arr));
}
for (int i = 0; i < nums.length ; i++) {
if (nums[i] > 0) {
print_arr[index] = nums[i];
nums[i] = -1;
printPermutation(nums,index + 1,print_arr);
}
}
}
解决方法
通过将数字设置为-1从数字中“删除”一个数字后,您需要将其添加回去,以便循环的下一次迭代以相同的状态开始。否则,您最终用-1填充nums
。通过此更改,我正确地获得了1,2,3的所有排列:
if (nums[i] > 0) {
print_arr[index] = nums[i];
nums[i] = -1;
printPermutation(nums,index + 1,print_arr);
// reset back to initial state
nums[i] = print_arr[index];
}