全排列
全排列n个元素就有n个分枝。
这玩意也叫排列树。
public class Perm {
public static void swap(int[] arr,int k,int j){
int tmp=0;
tmp =arr[k];
arr[k]=arr[j];
arr[j]=tmp;
}
public static void perm_idea(int[] arr,int k,int m){
if (k==m){
for (int a:arr) {
System.out.print(a);
}
System.out.println();
}else {
for (int j=k;j<=m;j++){
//我认为这个思想最重要的就是这个j交换的起始位置就是的从K开始。
swap(arr,j,k);
perm_idea(arr,k+1,m);
swap(arr,j,k);
交换两边是因为这是对同一个数组操作,再递归回退以后要重新对原数组交换,所以要把数组换成原来的数组
}
}
}
public static void main(String[] args) {
int[] arr ={1,2,3};
perm_idea(arr,0,arr.length-1);
}
斐波那契
找真子集的思想
递归是深度递归,但是分析要分层分析(一行一行的画图)
public static void line(int[] arr,int[] brr,int i,int n){
if (i>=n){
for (int j=0;j<arr.length;j++){
if (brr[j]==1){
System.out.print(arr[j]);
}
}
System.out.println();
}else {
brr[i]=0;
line(arr,brr,i+1,n);
brr[i]=1;
line(arr,brr,i+1,n);
}
}
public static void main(String[] args) {
int[] arr= {1,2,3};
int[] brr ={0,0,0};
line(arr,brr,0,3);
}
整数划分
解决多行输入
用hasnext输入 ,再while代码里直接调用执行函数。
可以用Arraylist去存储
也可以用ArrayList<String[]>去存储数组
可以用spilt将空格分开
将String转为Iterge类型用Interge.parseInt();
对于有空格也有逗号的可以连着先replace“ ”,“”然后split
String[] group_str_arr= group_str.replace(" ","").split(",");
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while(in.hasNext()){
int cur = in.nextInt();
//将整数转化为String
String binStr = Integer.toBinaryString(cur);
//求字符串中的子串
int[] res = getNum(binStr);
System.out.println(binStr+" "+res[0]+" "+res[1]);
}
}
public static int[] exchanged(String[] arr){
int l =arr.length;
int[] ar =new int[l];
for (int i=0;i<l;i++){
ar[i]=Integer.parseInt(arr[i]);
}
return ar;
}
public static void main(String[] args) {
ArrayList<String []> al =new ArrayList<>();
ArrayList<Integer> flag=new ArrayList<>();
Scanner in = new Scanner(System.in);
int i= 0;
while(in.hasNext()){
String str = in.nextLine();
String[] arr =str.split(" ");
for (String a:arr
) {
System.out.print(a);
}
System.out.println();
System.out.println(arr[2]);
al.add(arr);
System.out.println(al.size());
int[] num =exchanged(al.get(i++));
if (num[0]==1){
flag.add(1);
}else {
flag.add(0);
}
System.out.println(flag.size());
}
}