有人提到求出n取k組合系列中,JavaScript版本寫得太差,一堆內建轉型別的語法。於是用最近學的TypeScript改寫,應該能夠更容易理解。
class Combinations {
all: number;
want: number;
list: Array<string> = [];
constructor(total: number, want: number) {
this.all = total;
this.want = want;
this.calc('', total, want);
}
addlist(list: Array<string>, head: string, tail: string): void {
head = head.concat(tail)
list.push(head);
};
calc(before: string, all: number, want: number): void {
let tail: string = '';
if (want === 0) {
tail = "";
for (let i: number = 0; i < all; i++) {
tail = tail.concat('0');
}
this.addlist(this.list, before, tail);
} else if (all === want) {
tail = '';
for (let j: number = 0; j < all; j++) {
tail = tail.concat('1');
}
this.addlist(this.list, before, tail);
} else if (all === 1) {
this.addlist(this.list, before, want.toString());
} else { // all must > want
this.calc(before.concat('0'), all - 1, want);
this.calc(before.concat('1'), all - 1, want - 1);
}
};
}
//主程式
const comb: Combinations = new Combinations(5, 3);
console.log('共:', comb.list.length, '個');
for (let i in comb.list) {
console.log(comb.list[i]);
}
留言