我已經想出了一個非遞歸解決方案,它基於一個基於n的數字系統的數量。例如,對於基數爲3的系統,添加的數字是3的冪。
需要注意的是,這將打印所有組合,並且具有重複元素的組合應該隨後刪除,如我的情況所需。例如,從組合001,010,100中,只有第一個應該留下,元素按升序排列。
public static void main(String[] args) {
int t = 2;
int r = 2;
ArrayList<Integer> l = new ArrayList<Integer>();
int tmp;
for (int p = 0; p <= (int)(Math.pow((double)t, (double)r)) - 1; p++) {
tmp = p;
for (int q = r - 1; q >= 0; q--) {
for (int s = t - 1; s >= 0; s--) {
if (tmp >= s * (int) (Math.pow(t, q))) {
l.add(Integer.valueOf(s));
tmp = tmp - s * (int) (Math.pow(t, q));
break;
}
}
}
}
for (int i = 0; i <= l.size() - 1; i++) {
if (i % r != r - 1) {
System.out.print(l.get(i) + "-");
} else {
System.out.println(l.get(i));
}
}
}
打開IDE。 創建JAVA項目。 創建班級。 實施你的方法。 –
歡迎來到stackoverflow ..請閱讀提問的指導方針.. http://stackoverflow.com/help/asking – awsome