(1) 初始化一个m个元素的数组(全部由0,1组成),将前n个初始化为1,后面的为0。这时候就可以输出第一个组合序列了。
(2) 从前往后找,找到第一个10组合,将其反转成01,然后将这个10组合前面的所有1,全部往左边推 ,即保证其前面的1都在最左边。这时又可以输出一组组合序列了。
(3) 重复第(2)步,知道找不到10组合位置。这时已经输出了全部的可能序列了。 为什么?你想,(以m=5,n=3为例)一开始是11100,最后就是00111,已经没有10组合了 。
-
- public void combination(int m,int n)
- {
- char[] totalArray=new char[m];
-
- int totalSortNum=0;
-
-
- for(int i=0;i<m;i++){
- if(i<n)
- totalArray[i]='1';
- else
- totalArray[i]='0';
- }
- totalSortNum+=1;
- System.out.println(totalSortNum+"/t"+Arrays.toString(totalArray));
-
-
- int index=-1;
- while((index=String.valueOf(totalArray).indexOf("10"))!=-1){
-
- totalArray[index]='0';
- totalArray[index+1]='1';
-
- int count=0;
- for(int i=0;i<index;i++){
- if(totalArray[i]=='1')
- count++;
- }
- for(int j=0;j<index;j++){
- if(j<count)
- totalArray[j]='1';
- else totalArray[j]='0';
- }
-
- totalSortNum++;
- System.out.println(totalSortNum+"/t"+Arrays.toString(totalArray));
- }
- }
|