51,396
社区成员




import java.util.Arrays;
public class ArrayIndex {
private int length;
private int[] lengths;
private int[] indexs;
public ArrayIndex(int[] limits) {
length=limits.length;
lengths=Arrays.copyOf(limits,length);
indexs=new int[length];
}
public int[] get() {
return Arrays.copyOf(indexs,length);
}
public boolean set(int[] indexs) {
if (length!=indexs.length) {
return false;
}
for (int i=0; i<length; i++) {
if (indexs[i]>=lengths[i]||indexs[i]<0) {
return false;
}
}
for (int i=0; i<length; i++) {
this.indexs[i]=indexs[i];
}
return true;
}
public int[] next() {
for (int i=0; i<length; i++) {
if (++indexs[i]<lengths[i]) {
return Arrays.copyOf(indexs,length);
}
indexs[i]=0;
}
return null;
}
public int[] prev() {
for (int i=0; i<length; i++) {
if (--indexs[i]>=0) {
return Arrays.copyOf(indexs,length);
}
indexs[i]=lengths[i]-1;
}
return null;
}
public void reset() {
for (int i=0; i<length; i++) {
indexs[i]=0;
}
}
@Override
public String toString() {
return "ArrayIndex [limits="+Arrays.toString(lengths)+", indexs="+Arrays.toString(indexs)+"]";
}
@Override
public int hashCode() {
final int prime=31;
int result=1;
result=prime*result+Arrays.hashCode(indexs);
result=prime*result+Arrays.hashCode(lengths);
return result;
}
@Override
public boolean equals(Object obj) {
if (this==obj) {
return true;
}
if (obj==null) {
return false;
}
if (getClass()!=obj.getClass()) {
return false;
}
ArrayIndex other=(ArrayIndex)obj;
if (length!=other.length) {
return false;
}
if (!Arrays.equals(indexs,other.indexs)) {
return false;
}
if (!Arrays.equals(lengths,other.lengths)) {
return false;
}
return true;
}
}
import java.util.ArrayList;
import java.util.Arrays;
class ArrayIndex {
private int index;
private int[] limits;
private int[] indexs;
public ArrayIndex(int[] limits) {
this.limits=limits;
indexs=new int[limits.length];
}
public int[] get() {
return indexs;
}
public int[] next() {
for (int i=index; i<indexs.length; i++) {
if (++indexs[i]<limits[i]) {
return indexs;
}
indexs[i]=0;
}
return null;
}
}
class Test {
public static void main(String[] args) {
char[][] params=new char[][]{{'a','b','c'},{'b'},{'f'},{'f','d'}};
String[] rs=getPermutations(params);
for (String r : rs) {
System.out.println(r);
}
}
public static String[] getPermutations(char[][] params) {
StringBuffer buffer=new StringBuffer();
ArrayList<String> list=new ArrayList<String>();
int[] lengths=new int[params.length];
for (int i=0; i<params.length; i++) {
lengths[i]=params[i].length;
}
ArrayIndex arrayIndex=new ArrayIndex(lengths);
int[] indexs=arrayIndex.get();
do {
buffer.setLength(0);
for (int i=0; i<params.length; i++) {
buffer.append(params[i][indexs[i]]);
}
list.add(buffer.toString());
indexs=arrayIndex.next();
} while (indexs!=null);
return list.toArray(new String[list.size()]);
}
}