【java】全排列 列舉子集
阿新 • • 發佈:2018-12-30
全排列:
輸入一個包含n個字元的字串,輸出該字串的全排列。
樣例輸入:
abc
ab
樣例輸出:
abc
acb
bac
bca
cab
cba
ab
ba
import java.util.Scanner; import java.util.Arrays; public class Main { public static void permutation(char[]arr,char[] res,int[]visited,int cursor){ if(cursor==arr.length){ for(char c:res) System.out.print(c); System.out.println(); return; } for(int i=0;i<arr.length;i++){ if(visited[i]==0){ res[cursor]=arr[i]; visited[i]=1; permutation(arr,res,visited,cursor+1); visited[i]=0; } } } public static void main(String[] args){ Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { String s=scanner.nextLine(); char[] arr=s.toCharArray(); char[] res=new char[arr.length]; int[] visited=new int[arr.length]; Arrays.fill(visited, 0); permutation(arr,res,visited,0); } scanner.close(); } }
列舉子集:
輸入一個包含n個字元的字串,輸出該字串的所有可能的子集。
樣例輸入:
abc
樣例輸出:
a
ab
abc
ac
b
bc
c
import java.util.Scanner; public class Main { public static void subset(char[]arr,char[] res,int cursor,int index){ for(int i=0;i<cursor;i++){ System.out.print(res[i]); } System.out.println(); for(int i=index;i<arr.length;i++){ res[cursor]=arr[i]; index=i+1; subset(arr,res,cursor+1,index); } } public static void main(String[] args){ Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { String s=scanner.nextLine(); char[] arr=s.toCharArray(); char[] res=new char[arr.length]; subset(arr,res,0,0); } scanner.close(); } }
列舉子集的二進位制演算法:
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); while(scanner.hasNext()) { String s=scanner.nextLine(); char[] arr=s.toCharArray(); int n=arr.length; for(int i=0;i<(1<<n);i++){ for(int j=0;j<n;j++){ if((i&(1<<j))!=0){ System.out.print(arr[j]); } } System.out.println(); } } scanner.close(); } }