读书人

给定一字符数组,求数组中字符组成的所

发布时间: 2012-01-01 23:10:55 作者: rapoo

给定一字符数组,求数组中字符组成的所有排列?
如:

Java code
char[] c = {'a','b','c','d','e','f'};

得到这些字符组合的所有排列情况.

abcdef
abcdfe
abcedf
abcefd
abcfde
abcfed
...
...

[解决办法]
Java code
import java.util.ArrayList;import java.util.List;public class Test {    public static void main(String[] args) {        char[] c = {'a','b','c','d','e','f'};                //list保存找到的字符串        List<String> list = new ArrayList<String>();        //查找满足条件的字符串,并存入list        for(int i=0; i<c.length; i++) {            for(int j=0; j<c.length; j++) {                if(i == j)                    continue;                for(int k=0; k<c.length; k++) {                    if(i == k || j == k)                        continue;                    for(int l=0; l<c.length; l++) {                        if(i == l || j == l || k == l)                            continue;                        for(int m=0; m<c.length; m++) {                            if(i == m || j == m || k == m || l == m)                                continue;                            for(int n=0; n<c.length; n++) {                                if(i == n || j == n || k == n || l == n || m == n)                                    continue;                                StringBuffer sb = new StringBuffer();                                sb.append(c[i]);                                sb.append(c[j]);                                sb.append(c[k]);                                sb.append(c[l]);                                sb.append(c[m]);                                sb.append(c[n]);                                list.add(sb.toString());                            }                        }                    }                }            }        }                //打印字符串的个数,换行打印字符串,每行10个        System.out.println(list.size());        int count = 0;        for(int i=0; i<list.size(); i++) {            System.out.print(list.get(i));            count ++;            if(count % 10 != 0)//如果没够10个,行尾加","号                System.out.print(",");            else//10个换行                System.out.println();        }    }}
[解决办法]
Java code
public static void main(String[] args) {    char[] origin = { 'a', 'b', 'c', 'd', 'e', 'f' };    int length = origin.length;    int[] tmp = new int[length];    char[] res = new char[length];    byte[] check = new byte[(length + 7) / 8];    int index = 0, level = 0;    while (true) {        if (index >= 0 && index < length && level >= 0 && level < length) {            if ((check[index / 8] & (1 << index % 8)) == 0) {                tmp[level] = index;                res[level] = origin[index];                check[index / 8] |= (1 << index % 8);                level++;                index = 0;                continue;            } else {                index++;                continue;            }        }        if (level >= length) {            System.out.println(new String(res));            level = length - 1;            index = tmp[level];            check[index / 8] &= ~(1 << index % 8);            index++;            continue;        }        if (index >= length) {            level--;            if (level < 0)                break;            index = tmp[level];            check[index / 8] &= ~(1 << index % 8);            index++;            continue;        }    }}
[解决办法]
Java code
public static void main(String[] args) {    char[] origin = { 'a', 'b', 'c', 'd', 'e', 'f' };    int length = origin.length;    int[] tmp = new int[length];    char[] res = new char[length];    boolean[] check = new boolean[length];    int index = 0, level = 0;    while (true) {        if (index >= 0 && index < length && level >= 0 && level < length) {            if (!check[index]) {                tmp[level] = index;                res[level] = origin[index];                check[index] = true;                level++;                index = 0;            } else {                index++;            }        } else if (level >= length) {            System.out.println(new String(res));            level = length - 1;            index = tmp[level];            check[index] = false;            index++;        } else if (index >= length) {            level--;            if (level < 0)                break;            index = tmp[level];            check[index] = false;            index++;        } else {            break;        }    }} 


[解决办法]

Java code
  public static ArrayList<String> source;  public static ArrayList<String> result;  public static void main(String[] args) {    char[] c = {        'a', 'b', 'c', 'd', 'e', 'f'};    testFun(c);  }  public static void testFun(char[] chararray) {    ArrayList<String> source = new ArrayList<String> ();    for (char c : chararray) {      source.add(String.valueOf(c));    }    result = new ArrayList<String> ();    test(source, "");    System.out.println("Total:"+result.size());    for(String str:result){      System.out.println(str);    }  }  public static void test(ArrayList<String> scr, String nowstep) {    if (scr.size() == 1) {      result.add(nowstep += scr.get(0));    } else {      for (int i = 0; i < scr.size(); i++) {        ArrayList<String> newscr = new ArrayList<String> ();        for (String s : scr) {          newscr.add(s);        }        String newstep = nowstep + newscr.remove(i);        test(newscr, newstep);      }    }  }
[解决办法]
#include <stdio.h>
#include <stdlib.h>
#define num 5
int main()
{
int i,j=num;
char *p[num];
char c[num];

void func(int n,char *p[],char c[]);

printf("please insert %d words:",j);

for (i=0;i<num;i++)
scanf("%c",&c[i]);

for (i=0;i<num;i++)
p[i]=&c[i];

func(num,p,c);
return 0;
}

void func(int n,char *p[],char c[])
{
int i,j,k;
char *pr;
if (n==1)
printf("%c",*p[0]);

if (n==2)
{
for (i=1;i<3;i++)
{
pr=p[num-1];p[num-1]=p[num-2];p[num-2]=pr;
for (j=0;j<num;j++)
printf("%c",*p[j]);
printf("|");
}
}

else
{
for(k=0;k<n;k++)
{

if(k==0)
func(n-1,p,c);
else
{
pr=p[num-n],p[num-n]=p[num-k],p[num-k]=pr;
func(n-1,p,c);
pr=p[num-n],p[num-n]=p[num-k],p[num-k]=pr;
}
}
}
}
我师傅写,超牛,我得好好消化消化
[解决办法]
Java code
public static void main(String[] args) {        List<String> result = new ArrayList<String>();        char[] c = { 'a', 'b', 'c', 'd', 'e', 'f' };        for (char n : c) {            result = sort(n, result);        }        System.out.println(result.size());    }        private static List<String> sort(char c, List<String> result) {        List<String> newRes = new ArrayList<String>();        if (result == null || result.size() == 0) {            newRes.add(c + "");            return newRes;        }        for (int i = 0; i < result.size(); i++) {            getNewRes(newRes,result.get(i),c);        }        return newRes;    }    private static void getNewRes(List<String> newRes, String source,            char c) {        StringBuffer sb = new StringBuffer();        for (int i = 0; i <= source.length(); i++) {            sb.delete(0, sb.length());            append(sb,i,c,source);            newRes.add(sb.toString());        }    }    private static void append(StringBuffer sb, int index, char c, String source) {        if (index > 0) {            sb.append(source.substring(0, index));        }        sb.append(c);        if (index < source.length()) {            sb.append(source.substring(index, source.length()));        }    } 

读书人网 >J2SE开发

热点推荐