A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谢波 中级黑马   /  2013-3-18 11:58  /  1598 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谢波 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

7 个回复

倒序浏览
  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 14:38
回复 使用道具 举报
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.得出想要的结果进行打印

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 认真奖

查看全部评分

回复 使用道具 举报
谢谢楼上 的回答
可能是我的要求没说清楚  我的意思是数组和指定的个数是不确定的
回复 使用道具 举报
arr.length = 数组的长度   
用它控制循环的次数
回复 使用道具 举报
谢波 发表于 2013-3-18 12:48
谢谢楼上 的回答
可能是我的要求没说清楚  我的意思是数组和指定的个数是不确定的 ...

可以将这个   修改到帖子的提问中去~
回复 使用道具 举报
楼主多研究一下二维数组吧   应该对你有帮助
回复 使用道具 举报
张洪慊 发表于 2013-3-18 12:11

呵呵,就这两句话..没用啥高深知识,以为楼主肯定懂,所以没加.
好吧,"一失足成千古恨"
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马