跳到主要內容

求出n取k組合的列表 JavaScript 版,同場加映 CoffeeScript版

廢話就不說了,現在的JavaScript比起十幾年前真是好寫多了,語法這幾年來也沒有大改版,所以我這兩年花點時間學了一下現代的JavaScript語法,但程度仍然低落。

我用 node.js 直接在console執行,若沒有可以用瀏覽器的開發者工具試
addlist = function(head, tail) {
  return list.push(head + tail);
};

calc = function(before, all, want) {
  if (want === 0) {
    tail = [];
    for (i=0;i<all;i++) {
      tail += [0];
    }
    addlist(before, tail);
  } else if (all === want) {
      tail = [];
      for (i=0;i<all;i++) {
        tail += [1];
      }
      addlist(before, tail);
  } else if (all === 1) {
    addlist(before, [want]);
  } else {
    calc(before + [0], all - 1, want);
    calc(before + [1], all - 1, want - 1);
  }
};


//主程式
var all = 5;
var want = 3;
var list = [];
calc([], all, want);
console.log('共:', list.length, '個');
for (var i in list) {
  console.log(list[i]);
}

同場加映 CoffeeScript版,純粹練功一下。
addlist=(head, tail)->
   list.push head+tail
calc=(before, all, want) ->
   if want == 0
     tail=[]
     for i in [1..all]
        tail+=[0]
     addlist(before, tail)
   else if all == want
      tail = []
      for i in [1..all]
         tail +=[1]
      addlist(before, tail)
   else if all == 1
      addlist(before, [want])
   else
      calc(before+[0], all-1, want)
      calc(before+[1], all-1, want-1)
#主程式
all=5
want=3
list=[]
calc([], all, want)
console.log '共:', list.length, '個'
for a in list
   console.log a

留言

這個網誌中的熱門文章

Personal Bookmark

Java SE 6 + Firefox 2 UI 問題 As I do . Google拋棄了了SOAP API,浮想聯翩 https://www.gandi.net/ VS 2005 SP1中文版推出 Windows Vista中文版下載 ASP.NET 2.0網頁執行管線與快取原理 Cache 2.0快取架構與快取資料自動移除架構圖 flickr sync 分享與試用 SUN Looking Glass 3D圖形介面發布1.0 雅虎勵精圖治推動改革 Wait and see 國內某SOC疑遭駭客入侵 大砲開講 Very Important! 微軟公佈Vista安全程式介面草案 一窺Google開原碼庫房乾坤 qing is writing a dig girl net... wait and see

DBeaver 介面語言

DBeaver是我個人頗常用的一套跨平台Database管理工具,最近升級後發現Windows版本居然變成簡體中文,而且無法切換為英文。

自然人憑證讀卡機驅動程式

鳥毅用的是第一代的自然人憑證讀卡機,EZ100PU(後來有同事買EZmini可以讀SIM卡似乎更好),每年報稅時用一次。 本來只是要申請些政府業務,一時之間找不到光碟,沒想到在 驅動程式下載 居然看到Linux和Mac的驅動程式,剩下的就是政府單位的網頁和程式應該改版了吧!!!