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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Rancho_Gump 高级黑马   /  2013-1-27 14:51  /  2477 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-30 10:36 编辑

给出任意一组数 例如"12345";打印出它的所有排列组合(暂不考虑重复)
我对于递归很模糊,不知道这道题可以用递归实现不?请高手指导。
下面是我的解决方法,感觉很不好,可以有更简便的方法么?
  1. public static void main(String[] args) {
  2. // TODO Auto-generated method stub
  3. String str ="12345";
  4. System.out.println(str);
  5. char[] c = str.toCharArray();
  6. for(int i = 0;i<c.length+1;i++)
  7. {
  8. for(int y = 0;y<c.length;y++)
  9. {

  10. if(i==y)
  11. continue;
  12. if(i==c.length)
  13. {
  14. if(i-1==y)
  15. continue;
  16. char temp = c[i-1];
  17. c[i-1]= c[y];
  18. c[y]= temp;
  19. System.out.println(new String(c));
  20. }else
  21. {
  22. char temp = c[i];
  23. c[i]= c[y];
  24. c[y]= temp;
  25. System.out.println(new String(c));
  26. }

  27. }
  28. }
  29. //s();
  30. }
复制代码

9 个回复

倒序浏览
你这个运行不出来啊
public static void main(String[] args) {

// TODO Auto-generated method stub

String str ="12345";

System.out.println(str);

char[] c = str.toCharArray();

for(int i = 0;i<c.length+1;i++)

{

for(int y = 0;y<c.length;y++)

{



if(i==y)

continue;

if(i==c.length)

{

if(i-1==y)

continue;

char temp = c[i-1];

c[i-1]= c[y];

c[y]= temp;

System.out.println(new String(c));

}else

{

char temp = c[i];

c[i]= c[y];

c[y]= temp;

System.out.println(new String(c));

}



}

}

//s();

}
回复 使用道具 举报
王文正 发表于 2013-1-27 17:57
你这个运行不出来啊
public static void main(String[] args) {

可以啊,就是感觉麻烦 不知道有更简便的实现方式不
回复 使用道具 举报
好 我再试试 辛苦版主了 可能刚才出现点错误
回复 使用道具 举报
嘿嘿 运行出来了 我感觉不是太麻烦 你能想出来种方法已经很不容易了 呵呵
回复 使用道具 举报
本帖最后由 张向辉 于 2013-1-27 18:26 编辑
王文正 发表于 2013-1-27 18:15
嘿嘿 运行出来了 我感觉不是太麻烦 你能想出来种方法已经很不容易了 呵呵


这个结果是拼凑出来的,程序可读性不强。思路不是很清晰,如果你有好的方法,跟帖啊,拜托了,谢谢。
回复 使用道具 举报
我是小菜鸟 初学者 还望大师多多指教!我晚上问问我学长,如果有简单的方法 一定跟帖!
回复 使用道具 举报
package com.itheima;

public class PermutCombi {
    public static void output(int[] num, int[] arr) {
        int i;
        for (i = arr.length - 1; i >= 0; --i)
            System.out.print((arr[num[i]]) + "  ");
        System.out.println();
    }

    public static void permutCombi(int[] arr, int n) {
        int[] num, mark;
        int i, flag;
        num = new int[n + 1];
        mark = new int[n];
        for (i = 0; i <= n; ++i)
            num[i] = 0;
        do {
            for (i = 0; i < n; ++i)
                mark[i] = 0;
            flag = 0;
            ++num[0];
            for (i = 0; i < n; ++i) {
                if (num[i] == n) {
                    num[i] = 0;
                    ++num[i + 1];
                }
                ++mark[num[i]];
                // 各位数组单元有无重复
                if (mark[num[i]] > 1) {
                    flag = 1;
                    break;
                }
            }
            if (flag == 0)
                output(num, arr);
        } while (num[n] == 0);
    }

    public static void main(String[] args) {   
        int[] n = {12, 22, 2, 4, 6};
        permutCombi(n, n.length);
    }
}

运行结果:
12  22  2  4  6  
12  22  2  6  4  
12  22  4  2  6  
12  22  4  6  2  
12  22  6  2  4  
12  22  6  4  2  
12  2  22  4  6  
12  2  22  6  4  
12  2  4  22  6  
12  2  4  6  22  
12  2  6  22  4  
12  2  6  4  22  
12  4  22  2  6  
12  4  22  6  2  
12  4  2  22  6  
12  4  2  6  22  
12  4  6  22  2  
12  4  6  2  22  
12  6  22  2  4  
12  6  22  4  2  
12  6  2  22  4  
12  6  2  4  22  
12  6  4  22  2  
12  6  4  2  22  
22  12  2  4  6  
22  12  2  6  4  
22  12  4  2  6  
22  12  4  6  2  
22  12  6  2  4  
22  12  6  4  2  
22  2  12  4  6  
22  2  12  6  4  
22  2  4  12  6  
22  2  4  6  12  
22  2  6  12  4  
22  2  6  4  12  
22  4  12  2  6  
22  4  12  6  2  
22  4  2  12  6  
22  4  2  6  12  
22  4  6  12  2  
22  4  6  2  12  
22  6  12  2  4  
22  6  12  4  2  
22  6  2  12  4  
22  6  2  4  12  
22  6  4  12  2  
22  6  4  2  12  
2  12  22  4  6  
2  12  22  6  4  
2  12  4  22  6  
2  12  4  6  22  
2  12  6  22  4  
2  12  6  4  22  
2  22  12  4  6  
2  22  12  6  4  
2  22  4  12  6  
2  22  4  6  12  
2  22  6  12  4  
2  22  6  4  12  
2  4  12  22  6  
2  4  12  6  22  
2  4  22  12  6  
2  4  22  6  12  
2  4  6  12  22  
2  4  6  22  12  
2  6  12  22  4  
2  6  12  4  22  
2  6  22  12  4  
2  6  22  4  12  
2  6  4  12  22  
2  6  4  22  12  
4  12  22  2  6  
4  12  22  6  2  
4  12  2  22  6  
4  12  2  6  22  
4  12  6  22  2  
4  12  6  2  22  
4  22  12  2  6  
4  22  12  6  2  
4  22  2  12  6  
4  22  2  6  12  
4  22  6  12  2  
4  22  6  2  12  
4  2  12  22  6  
4  2  12  6  22  
4  2  22  12  6  
4  2  22  6  12  
4  2  6  12  22  
4  2  6  22  12  
4  6  12  22  2  
4  6  12  2  22  
4  6  22  12  2  
4  6  22  2  12  
4  6  2  12  22  
4  6  2  22  12  
6  12  22  2  4  
6  12  22  4  2  
6  12  2  22  4  
6  12  2  4  22  
6  12  4  22  2  
6  12  4  2  22  
6  22  12  2  4  
6  22  12  4  2  
6  22  2  12  4  
6  22  2  4  12  
6  22  4  12  2  
6  22  4  2  12  
6  2  12  22  4  
6  2  12  4  22  
6  2  22  12  4  
6  2  22  4  12  
6  2  4  12  22  
6  2  4  22  12  
6  4  12  22  2  
6  4  12  2  22  
6  4  22  12  2  
6  4  22  2  12  
6  4  2  12  22  
6  4  2  22  12  

希望对楼主有所帮助
       

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

回复 使用道具 举报
排列和组合好像不是一个意思哦
回复 使用道具 举报
pzfpang449 发表于 2013-1-27 20:22
package com.itheima;

public class PermutCombi {

哎呀 看了半天,终于看明白了。 愁死我了,俺还是太笨了。你的程序就是相当于打印出所有的n长度的n进制无重复数字,我自己再尝试下其他方法去
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马