提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
一、题目
给出一个数字,请写出他的全排列
输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
二、学习的算法
时间回溯算法,通过递归和还原构成
java
import java.util.*;
public class Permutation {
public static void main(String[] args) {
int num = 123;
String str = String.valueOf(num);
List<String> result = new ArrayList<>();
permute(str.toCharArray(), 0, result);
for (String s : result) {
System.out.println(s);
}
}
static void permute(char[] arr, int start, List<String> result) {
if (start == arr.length) {
result.add(new String(arr));
return;
}
for (int i = start; i < arr.length; i++) {
swap(arr, start, i);
permute(arr, start + 1, result);
swap(arr, start, i);
}
}
static void swap(char[] arr, int i, int j) {
char temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
三.自己的想法
一位位取得每位数字,并写入0-9字典计数。
从最高位开始,从小到大排列,直到完全从大到小排列,就认为完成一次全排列
例如123排成321就认为排序完成
总结
如果一个题十分钟内还没有想法,可能就是做不出来