公司一道算法题,求大神给其他思路!
等 级:新手上路帖 子:20
专家分:4
注 册:2012-12-5
结帖率:50%
楼主 问题点数:0 回复次数:0
公司一道面试题,求大神给思路!
输入1234
输出
1
2
3
4
12
13
14
23
24
34
123
124
234
1234
我的思路是,全排列,然后按条件输出,但是空间复杂度和时间复杂度都挺高,求其他思路!
import java.util.Scanner; public class 打印所有集合全排列 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); char c[]=sc.next().toCharArray(); char b[]; for (int i = 1; i <=c.length; i++) { b=new char[i]; 组合(c.length,i,c,b); } } public static void 组合(int n,int k,char c[],char b[]){ int i; if(k==0){ String s=""; for (int j = 0; j < b.length; j++) { s=s+b[j]+""; } 全排列(0,s.toCharArray()); return; }else{ for (int j = n-1; j >=0; j--) { b[k-1]=c[j]; 组合(j,k-1,c,b); } } } public static void 全排列(int k,char c[]){ if(k>=c.length){ for (int i = 0; i < c.length; i++) { System.out.print(c[i]); } System.out.println(); return ; } for (int i = k; i < c.length; i++) { {char temp=c[i];c[i]=c[k];c[k]=temp;} 全排列( k+1, c); {char temp=c[i];c[i]=c[k];c[k]=temp;} } } }
import java.util.Scanner; public class 打印组合数 { public static void main(String[] args) { Scanner sc=new Scanner(System.in); char c[]=sc.next().toCharArray(); char b[]; for (int i =1; i <=c.length; i++) { b=new char[i]; 组合(c.length,i,c,b); } } public static void 组合(int n,int k,char c[],char b[]){ int i; if(k==0){ // String s=""; for (int j = 0; j < b.length; j++) { System.out.print(b[j]); } System.out.println(); //全排列(0,s.toCharArray()); return; }else{ for (int j = n-1; j >=0; j--) { b[k-1]=c[j]; 组合(j,k-1,c,b); } } } // public static void 全排列(int k,char c[]){ // if(k>=c.length){ // for (int i = 0; i < c.length; i++) { // System.out.print(c[i]); // } // System.out.println(); // return ; // } // for (int i = k; i < c.length; i++) { // {char temp=c[i];c[i]=c[k];c[k]=temp;} // 全排列( k+1, c); // {char temp=c[i];c[i]=c[k];c[k]=temp;} // } // } }