【java】全排列 枚举子集

来源:互联网 发布:轩辕剑符鬼进阶数据 编辑:程序博客网 时间:2024/05/21 12:07

全排列:

输入一个包含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();}}



0 0