本帖最後由 marlin12 於 2019-4-16 21:42 編輯
就題目而言,呢個係蠢既方法
快既方法去搵recursion
天下無雙 發表於 2019-4-16 19:59 
雖然我都唔覺得[hk8guy]師兄的方法好,但是他的方法確實比recursion快很多。
[hk8guy]師兄的方法,用咗1275ms。- console.time('elapsed');
- const patterns = [];
- for (let i1 = 1; i1 <= 44; i1++) {
- for (let i2 = i1 + 1; i2 <= 45; i2++) {
- for (let i3 = i2 + 1; i3 <= 46; i3++) {
- for (let i4 = i3 + 1; i4 <= 47; i4++) {
- for (let i5 = i4 + 1; i5 <= 48; i5++) {
- for (let i6 = i5 + 1; i6 <= 49; i6++) {
- patterns.push( [i1, i2, i3, i4, i5, i6] );
- }
- }
- }
- }
- }
- }
- console.timeEnd('elapsed');
複製代碼 recursion方法,用咗6537ms。- function combinations( n, r ) {
- const pattern = [],
- patterns = [];
- function worker( begin, end, offset ) {
- for( let x = begin; x <= end; x++ ) {
- pattern[offset] = x;
- if( offset === r - 1 ) {
- patterns.push( pattern.slice() );
- } else {
- worker( x + 1, end + 1, offset + 1 );
- }
- }
- }
- worker( 1, n - r + 1, 0 );
- return patterns;
- }
- console.time('elapsed');
- const results = combinations(49, 6);
- console.timeEnd('elapsed');
複製代碼 |