领扣LintCode问题答案-15. 全排列

领扣LintCode问题答案-15. 全排列

目录

  • 15. 全排列
  • 鸣谢

15. 全排列

给定一个数字列表,返回其所有可能的排列。
你可以假设没有重复数字。

样例 1:

输入:[1]
输出:
[
[1]
]

样例 2:

输入:[1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

public class Solution {
     
	/*
	 * @param nums: A list of integers.
	 * @return: A list of permutations.
	 */
	public List<List<Integer>> permute(int[] nums) {
     
		// write your code here
		List<List<Integer>> ret = new ArrayList<>();
		permute(nums, 0, nums.length - 1, ret);
		return ret;
	}


	private void permute(int[] nums, int startIndex, int endIndex, List<List<Integer>> ret) {
     
		// write your code here
		if (startIndex >= endIndex) {
     
			List<Integer> oneRet = new ArrayList<Integer>();
			for (int num : nums) {
     
				oneRet.add(num);
			}
			ret.add(oneRet);
		} else {
     
			for (int i = startIndex; i <= endIndex; i++) {
     
				if (i > startIndex) {
     
					int t = nums[i];
					nums[i] = nums[startIndex];
					nums[startIndex] = t;
				}
				permute(nums, startIndex + 1, endIndex, ret);
				if (i > startIndex) {
     
					int t = nums[i];
					nums[i] = nums[startIndex];
					nums[startIndex] = t;
				}
			}
		}
	}
}

原题链接点这里

鸣谢

非常感谢你愿意花时间阅读本文章,本人水平有限,如果有什么说的不对的地方,请指正。
欢迎各位留言讨论,希望小伙伴们都能每天进步一点点。

你可能感兴趣的:(算法,算法)