黑马程序员技术交流社区

标题: 输出abcd字符串的所有队列还是排列来着 [打印本页]

作者: yuanxianzhi    时间: 2016-9-6 21:47
标题: 输出abcd字符串的所有队列还是排列来着
就是如果是abc 就有abc abc bac bca cab cba6 这个忘了叫什么。感觉固定下来不太安逸,就写了一个字符串的排列
搞了许久才实现了效果,不知道行不得行,大神们给给意见
[Java] 纯文本查看 复制代码
public static void main(String[] args) {

                getStringPaiLie("qwer");

        }

        public static void getStringPaiLie(String s) {
                // 需要判断字符串内的元素是否唯一  
                char chs[] = s.toCharArray();

                if (checkArrayRepeat(chs)) {
                        System.out.println("字符串元素不唯一");
                        return;
                }

                int len = chs.length;
                tempChars = new char[len];
                xunhuan(chs, 0);
                System.out.println(slist.size());
                System.out.println(slist);
        }
        /**
         * 添加队列字符串到数组
         * @param chs
         * @param index 数组索引
         *
         */
        public static void xunhuan(char chs[], int index) {
                for (int i = 0; i < chs.length; i++) {
                        //每进入一重循环,记录到静态数组中。也可以传个数组过来  第一个循环体就是tempChar(0)
                        tempChars[index] = chs;
                        //如果没到最里面的循环,就递归下去,记录每一层的值 tempChar(i) 递归时索引+1,tempChar(1)=第二重循环的i值
                        if (index != chs.length - 1) {
                                xunhuan(chs, index + 1);
                        }
                        //递归到最里面的循坏,开始写代码  如果tempChar里面有重复的,就什么都不干继续循环
                        if (index == chs.length - 1) {
                                if (checkArrayRepeat(tempChars))
                                        continue;
                                //如果数组无重复值,就把他变成字符串存起来
                                slist.add(new String(tempChars));
                        }
                }

        }
        /**
         * 简单的判断字符数组里有无重复元素
         * @param c
         * @return 有重复 true 无重复 false
         */
        private static boolean checkArrayRepeat(char[] c) {
                for (int i = 0; i < c.length; i++) {
                        for (int j = i + 1; j < c.length; j++) {
                                if (c == c[j]) {
                                        return true;
                                }
                        }
                }
                return false;
        }


作者: yuanxianzhi    时间: 2016-9-6 21:48
还有2个静态属性
        static ArrayList<String> slist = new ArrayList<String>();
        static char tempChars[] = null;




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