笔试的编程题总是很头疼,怕的有思路编不出来,作为一个半路出家健忘者,不得不记录一些见得比较多的算法,相信对以后笔试的编程题会有大大的帮助,话不多说,开始。
1.穷举法
全排列:
比如一个数组给你,让你求所有全排列的可能,这个方法不去重的,要是去重的话,直接搞一个Set去存放一下是不是就好了
public class Main {
public static void main(String[] args) {
int[] ss = {1,2,3,4};
process(ss, 0, ss.length-1);
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void process(int[] arr, int from, int to) {
if(to<=1) return;
if(from==to) {
//如果这里是字符数组可以直接输出即可,无序遍历
for(int a:arr) {
System.out.print(a);
}
System.out.print(" ");
} else {
for(int i=from;i<=to;i++) {
swap(arr, i, from);//交换的顺序无所谓
process(arr, from+1, to);
swap(arr, from, i);
}
}
}
}