给定一字符数组,求数组中字符组成的所有排列?
如:
- 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())); } }