package test;
import java.util.LinkedList;
public class TestCombination {
public static void combination(char[] arr) {
int len = arr.length;
int[] used = new int[len];
LinkedList<Character> linkedlist = new LinkedList<Character>();
combination(arr, 0, linkedlist, used);
}
public static void combination(char[] arr, int i,
LinkedList<Character> linkedlist, int[] used) {
if (i == arr.length) {
for (int j = 0; j < linkedlist.size(); j++) {
System.out.print(linkedlist.get(j) + " ");
}
System.out.println();
} else {
for (int k = 0; k < arr.length; k++) {
if (used[k] == 0) {
used[k] = 1;
linkedlist.push(arr[k]);
combination(arr, i + 1, linkedlist, used);
linkedlist.pop();
used[k] = 0;
}
}
}
}
public static void combination_norepeat(String str){
char[] charr=str.toCharArray();
int [] used=new int[255];
int diffcharnum=0;
for(int i=0;i<charr.length ;i++){
used[charr[i]]++;
}
char[] res=new char[charr.length];
for(int i=0;i<255;i++){
if(used[i]>0){
diffcharnum++;
}
}
char[] letters=new char[diffcharnum]; //统计不同的字符
for(int i=0,j=0;i<255&&j<diffcharnum;i++){
if(used[i]>0){
letters[j++]=(char) i;
}
}
combination_norepeat(charr,0,used,res,letters);
}
public static void combination_norepeat(char [] str,int i,int [] used,char [] res,char[] letters){
if(i==res.length ){
for(int j=0;j<res.length;j++){
System.out.print(res[j]+" ");
}
System.out.println();
}else{
for(int k=0;k<letters.length;k++){
if(used[letters[k]]>0){
used[letters[k]]--;
res[i]=letters[k];
combination_norepeat(str,i+1,used,res,letters);
used[letters[k]]++;
}
}
}
}
public static int AddWithoutArithmetic(int num1, int num2) {
if (num2 == 0)
return num1;
int sum = num1 ^ num2;
int carry = (num1 & num2) << 1;
return AddWithoutArithmetic(sum, carry);
}
public static void main(String args[]) {
String str = "aabc";
combination_norepeat(str);
}
}
字符串组合
最新推荐文章于 2022-02-12 00:30:18 发布