有人提到求出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]); }
留言