黑马程序员技术交流社区

标题: 排列组合问题,求解 [打印本页]

作者: 谢波    时间: 2013-3-18 11:58
标题: 排列组合问题,求解
本帖最后由 谢波 于 2013-3-18 15:56 编辑

比如说数组:int[] arr = {1,2,3}; 打印出他们的所有2个数的组合
结果是:12 13 23
求打印任意个数元素的任意个数的所有组合思路和详细代码,最好用递归
谢谢了
排列我会了

已经解决 谢谢大家 的帮助
奉上源代码:
  1. public class Combination1 {   

  2. public static void main(String[] args) {   
  3.                 String input = "abcd";
  4.                 int num = 4;
  5.                 Combine(input, num);   
  6.         }   
  7.         private static void Combine(String input, int num) {   
  8.                 char[] a = input.toCharArray();   
  9.                 String b = "";   
  10.                 Combine(a, num, b, 0);   
  11.         }   
  12.         private static void Combine(char[] a, int num, String b, int low)
  13.         {   
  14.                 if (num == 0)
  15.                 {   
  16.                         System.out.println(b);   
  17.                 }
  18.                 else
  19.                 {   
  20.                         for (int i = low; i < a.length; i++)
  21.                         {   
  22.                                 b += a[i];   
  23.                                 Combine(a, num - 1, b, i+1);   
  24.                                 b=b.substring(0, b.length()-1);   
  25.                         }   
  26.                 }   
  27.         }   
  28. }
复制代码

作者: 张洪慊    时间: 2013-3-18 12:11
  1. //双重循环嵌套,穷举法
  2. class Arr
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.           int[] arr={1,2,3};
  7.           for(int i=0;i<arr.length;++i)
  8.                   for(int j=i+1;j<arr.length;++j)
  9.                     System.out.println(""+arr[i]+arr[j]);
  10.        
  11.         }
  12. }
复制代码

作者: 赵亚威    时间: 2013-3-18 12:37
public class ArrayTest {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
     int[] arr={0,1,2,3,4,5,6,7,8,9};
     for(int x=0;x<arr.length;x++){
             for(int y=0;y<arr.length;y++){
                     if(arr[x]==0&&arr[y]==0);
             else
                     if(arr[x]==0)
                             System.out.print(y+" ");
                     else
                             System.out.print(x+""+y+" ");
                     
             }
             System.out.println();
             
     }
        }

}
思想:
1.对数组进行组合 而且是2位数的 所以用嵌套for循环
2.因为组合所以都的从角标为0的开始 这里声明变量x=0 x<arr.length
y=0 y<arr.length
3.组合有为0的 就去掉不要的 用if进行判断
4.得出想要的结果进行打印
作者: 谢波    时间: 2013-3-18 12:48
谢谢楼上 的回答
可能是我的要求没说清楚  我的意思是数组和指定的个数是不确定的
作者: 宋耀冬    时间: 2013-3-18 14:34
arr.length = 数组的长度   
用它控制循环的次数
作者: 陈丽莉    时间: 2013-3-18 14:39
谢波 发表于 2013-3-18 12:48
谢谢楼上 的回答
可能是我的要求没说清楚  我的意思是数组和指定的个数是不确定的 ...

可以将这个   修改到帖子的提问中去~
作者: 宋耀冬    时间: 2013-3-18 14:42
楼主多研究一下二维数组吧   应该对你有帮助

作者: 张洪慊    时间: 2013-3-18 14:57
张洪慊 发表于 2013-3-18 12:11

呵呵,就这两句话..没用啥高深知识,以为楼主肯定懂,所以没加.
好吧,"一失足成千古恨"




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2