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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

26黑马币
用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求: "4 "不能在第三位, "3 "与 "5 "不能相连

最佳答案

查看完整内容

package com.heima.test; import java.util.Set; import java.util.TreeSet; public class MyTest { public static TreeSet set = new TreeSet();//注意这里可以自动消除重复 public static void perm(char[] n, int beg, int end) {//对第几位到第一位的数进行排序 if (beg == end) {//如果只是对某一位进行排序,则直接返回 addNumber(String.valueOf(n)); } else { for (i ...

6 个回复

倒序浏览
package com.heima.test;

import java.util.Set;
import java.util.TreeSet;

public class MyTest {

    public static TreeSet<String> set = new TreeSet<String>();//注意这里可以自动消除重复

    public static void perm(char[] n, int beg, int end) {//对第几位到第一位的数进行排序
        if (beg == end) {//如果只是对某一位进行排序,则直接返回
            addNumber(String.valueOf(n));
        } else {
            for (int i = beg; i <= end; ++i) {
                swap(n, beg, i);
                perm(n, beg + 1, end);
                swap(n, beg, i);
            }
        }
    }

    public static void swap(char[] n, int x, int y) {//如果数组n中,第x,y位的数字不同,交换位置,否者直接返回
        if (x == y || n[x] == n[y]) {
            return;
        }
        char temp = n[x];
        n[x] = n[y];
        n[y] = temp;
    }

    public static void addNumber(String str) {//将符合条件的放在set里面
        if (str.charAt(2) == '4' || str.contains("35") || str.contains("53")) {
            return;
        }
        set.add(str);
    }

    public static void main(String args[]) {
        char[] number = new char[] { '1', '2', '2', '3', '4', '5','6' };
        perm(number, 0, number.length - 1);
        System.out.println(set.size());
        int cols = 10;
        for (String s : set) {
            System.out.print(s + " ");
            if (cols-- == 1) {
                System.out.println();
                cols = 10;
            }
        }
    }
}
对于字符同样适用addNumber的条件改一下就行。。。。
回复 使用道具 举报
用方法吧
回复 使用道具 举报
1.定义一个HashSet集合:储存这6个数字;
回复 使用道具 举报

1.定义一个HashSet集合:储存这6个数字;应为hashset是无序的,所以每次遍历都是不一样的
2.用无限循环while(true)进行遍历,把遍历的数添加到StringBuffer中,然后toString转换为字符串,然后判断.
3.通过索引判断第三位,然后循环subString判断连续两位是不是35,如果都不是,就打印该字符串
4,每次执行都不一样;自己可以琢磨一下.
回复 使用道具 举报
六合彩33333333333333
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马