关于字符串的全排列_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 关于字符串的全排列

关于字符串的全排列

 2010/12/27 9:48:35  sakajiaofu  http://sakajiaofu.javaeye.com  我要评论(0)
  • 摘要:给一个字符串然后写出这个字符串中的全部组合比如"abc"的组合有cababccbabacbcaacb实现的算法如下publicstaticvoidmain(String[]args){StringorignerStr="abc";allSort(orignerStr);}staticvoidallSort(StringoriStr){char[]charArr=oriStr.toCharArray();Set<String>finalSet=newHashSet<
  • 标签:字符串
给一个字符串 然后写出这个字符串中的全部组合
比如 "abc"的组合有
cab
abc
cba
bac
bca
acb
实现的算法如下
     public static void main(String[] args) {
        String orignerStr = "abc";
        allSort(orignerStr);
    }

    static void allSort(String oriStr) {
        char[] charArr = oriStr.toCharArray();
        Set<String> finalSet = new HashSet<String>();
        List<StringBuffer> fianlList = sortList(null, 0, oriStr.length(), charArr);
        // 根据set中元素不可以重复,去除重复值
        for (StringBuffer buffer : fianlList) {
            finalSet.add(new String(buffer));
        }
        fianlList = null;
        // 打印结果值
        for (String str : finalSet) {
            System.out.println(str);
        }
    }

    static List<StringBuffer> sortList(List<StringBuffer> list, int count, int length, char[] arr) {
        if (count < length) {
            List<StringBuffer> nextList = new LinkedList<StringBuffer>();
            String indexStr = String.valueOf(arr[count]);
            if (count == 0) {
                nextList.add(new StringBuffer(indexStr));
            }
            else {
                StringBuffer tempBuffer;
                for (StringBuffer buffer : list) {
                    for (int i = 0; i <= count; i++) {
                        tempBuffer = new StringBuffer(buffer);
                        // 在上次返回的值的前后左右加上新的字符串,比如上次的值是ab 这次的值是c
                        // 那么就在ab的前面加就是cab,在ab的后面加 就是abc,在ab的中间加就是acb
                        nextList.add(tempBuffer.insert(i, indexStr));
                    }
                }
                list = null;
            }
            count++;
            return sortList(nextList, count, length, arr);
        }
        return list;
    }





结果当字母小于9个时候还可以,但是当字母大于9个的时候就报了内存溢出了
            大家是怎么解决的啊!!!!
发表评论
用户名: 匿名