有關(guān)排列組合的一道算法題

有關(guān)排列組合的一道算法題

一址遇、題目內(nèi)容

廢話不多說,先上題目:

有一個 n × m 的網(wǎng)格滋戳,左下角為A钻蔑,右上角為B,規(guī)定每次只能走一步奸鸯,并且方向只能是向上或者向右咪笑,求A到B共有多少種走法?(例如一個日字形的格子就是一個2 × 1的網(wǎng)格娄涩,共有3種走法)并用Javascript寫出程序算法窗怒。

大家可以先思考一下怎么做,再去看我的方法钝满。

二兜粘、解決方法

這個問題我想了很久,一直在走彎路弯蚜,其實用一個抽象的數(shù)學(xué)方法就可以很輕松解決這個問題。

現(xiàn)在你可以把向右移動想象成記錄一個數(shù)字1剃法,把向上移動抽象成記錄一個數(shù)字0碎捺,并且這些數(shù)字是按順序排列的。

看到這里我相信聰明的小伙伴已經(jīng)想到了如何解決這個問題贷洲。

這個問題可以抽象成n個0和m個1的不同排列的總數(shù)收厨。比如2 × 2的網(wǎng)格就是2個0和2個1的所有不同排列的數(shù)量,也就是1100优构,1010诵叁,1001,0110钦椭,0101拧额,0011碑诉。

進而,我們可以把問題抽象成從(m + n)個0中侥锦,隨意抽取m個0并將它改為1的不同方法數(shù)进栽,是不是覺得問題很熟悉,沒錯恭垦!就是高中的排列組合快毛。我先把公式亮出來??:

C(m, n + m) = (n + m)!/(m! * n!)

想先復(fù)習(xí)一下排列組合知識的同學(xué)可以參見下一節(jié)。

三番挺、Javascript代碼描述

以上的結(jié)果用JS的描述唠帝,如下:

function getMethods(n, m) {
  // 定義一個求階乘的輔助函數(shù)
  function factorial(x) {
    if (x === 0) {
      return 1
    } else {
      return factorial(x -1) * x
    }
  }
  return factorial(m + n)/(factorial(m) * factorial(n))
}

如果小伙伴有好的算法,可以留言交流玄柏!

四襟衰、排列組合

簡單地講一下排列和組合。

排列

先舉個栗子(以下n禁荸,m均為正整數(shù))右蒲,從n個含有標有不同數(shù)字小球的袋子里,按順序抽取n個小球赶熟,且抽取后不再放入袋子里瑰妄。第一次抽的時候,有n種可能映砖;第二次抽的時候有n - 1種可能间坐,以此類推,抽完n個小球總共的不同排列個數(shù)為n!邑退。

如果條件不變竹宋,只把抽取的小球個數(shù)改為m(m <= n)個,結(jié)果也就變成:

n × (n - 1) × (n - 2) × ... × (n - m + 1)
整理一下即:
A(m, n) = n! / (n - m)!

組合

同樣是n個標記不同數(shù)字的小球放入一個袋子中地技,也是抽取m個蜈七,但是此時不算抽取的順序。也就是把排列的結(jié)果n!/(n - m)!再除以m個小球隨機排列的總方法術(shù)莫矗,即m!飒硅,所以結(jié)果為:

C(m, n) = A(m, n) / m! = n! / ( (n - m)! × m! )

如何得出之前的公式

運用以上的知識,可以總結(jié)出以下公式:

C(m, n + m) = A(m, n + m) / m!

            = (n + m)! / ( n! × m! )
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末作谚,一起剝皮案震驚了整個濱河市三娩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妹懒,老刑警劉巖雀监,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異眨唬,居然都是意外死亡会前,警方通過查閱死者的電腦和手機好乐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來回官,“玉大人曹宴,你說我怎么就攤上這事∏柑幔” “怎么了笛坦?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苔巨。 經(jīng)常有香客問我版扩,道長,這世上最難降的妖魔是什么侄泽? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任礁芦,我火速辦了婚禮,結(jié)果婚禮上悼尾,老公的妹妹穿的比我還像新娘柿扣。我一直安慰自己,他們只是感情好闺魏,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布未状。 她就那樣靜靜地躺著,像睡著了一般析桥。 火紅的嫁衣襯著肌膚如雪司草。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天泡仗,我揣著相機與錄音埋虹,去河邊找鬼。 笑死娩怎,一個胖子當著我的面吹牛搔课,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播截亦,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辣辫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了魁巩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤姐浮,失蹤者是張志新(化名)和其女友劉穎谷遂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卖鲤,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡肾扰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年畴嘶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片集晚。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡窗悯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出偷拔,到底是詐尸還是另有隱情蒋院,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布莲绰,位于F島的核電站欺旧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蛤签。R本人自食惡果不足惜辞友,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望震肮。 院中可真熱鬧称龙,春花似錦、人聲如沸戳晌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽躬厌。三九已至马昨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扛施,已是汗流浹背鸿捧。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疙渣,地道東北人匙奴。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像妄荔,于是被迫代替她去往敵國和親泼菌。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容