118. Pascal's Triangle

Swift 3.0

//
//  E_118_Pascal'sTriangle.swift
//  AlgorithmLeetCode
//
//  Created by okerivy on 2017/3/8.
//  Copyright ? 2017年 okerivy. All rights reserved.
//  https://leetcode.com/problems/pascals-triangle

import Foundation




// MARK: - 題目名稱(chēng): 118. Pascal's Triangle

/* MARK: - 所屬類(lèi)別:
 標(biāo)簽: Array
 
 相關(guān)題目:
  (E) Pascal's Triangle II
 
 */

/* MARK: - 題目英文:
 Given numRows, generate the first numRows of Pascal's triangle.
 
 For example, given numRows = 5,
 Return
 
 [
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
 ]
 
 */


/* MARK: - 題目翻譯:
 給定一個(gè)數(shù)字,生成一個(gè)帕斯卡三角形(楊輝三角)
 例如給定一個(gè)數(shù)字5 ,返回下面的數(shù)組
 [
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
 ]
 
 */



/* MARK: - 解題思路:
 
 要得到一個(gè)帕斯卡三角维蒙,我們只需要找到規(guī)律即可择份。
 
 第k層有k個(gè)元素
 每層第一個(gè)以及最后一個(gè)元素值為1
 對(duì)于第k(k > 2)層第n(n > 1 && n < k)個(gè)元素A[k][n],A[k][n] = A[k-1][n-1] + A[k-1][n]
 知道了上面的規(guī)律衣陶,就很好做了镀迂,我們使用一個(gè)二維數(shù)組來(lái)存儲(chǔ)整個(gè)三角
 
 */


/* MARK: - 復(fù)雜度分析:
 時(shí)間復(fù)雜度 O(n^2), 空間復(fù)雜度在最后一位有進(jìn)位時(shí)惡化為 O(n)
 
 */


// MARK: - 代碼:
private class Solution {
    func generate(_ numRows: Int) -> [[Int]] {
        
        // 初始化一個(gè)二維數(shù)組
        var arrays = [[Int]]()
        
        //大于等于1 進(jìn)行數(shù)組的遍歷
        if numRows >= 1 {
            // 二維數(shù)組 拼接第一個(gè)元素(長(zhǎng)度為1的,元素為1 一維數(shù)組)
            arrays.append([Int](repeating: 1, count: 1))
        
            for i in 1 ..< numRows {
                // 二維數(shù)組 拼接其余的元素(長(zhǎng)度為i+1的 初始值 為0 的一維數(shù)組)
                arrays.append([Int](repeating: 0, count: i+1))
                // 第一個(gè)元素設(shè)置為1
                arrays[i][0] = 1
                // 最后一個(gè)元素設(shè)置為1
                arrays[i][i] = 1
                for j in 1 ..< i {
                    // 中間元素 根據(jù)規(guī)則 進(jìn)行計(jì)算
                    arrays[i][j] = arrays[i - 1][j - 1] + arrays[i - 1][j];
                }
            }
        }

        return arrays
    }
    
    // 遞歸算法
    // 求楊輝三角中第i行第j列的值
    private func calcTriVal(_ dwRow: Int, _ dwCol: Int) -> Int {
        if 0 == dwCol || dwCol == dwRow {
            return 1
        } else {
            return calcTriVal(dwRow - 1, dwCol - 1) + calcTriVal(dwRow - 1, dwCol)
        }
        
    }
    
    func generate2(_ numRows: Int) -> [[Int]] {
        
        // 初始化一個(gè)二維數(shù)組
        var arrays = [[Int]]()
        for dwRow in 0 ..< numRows {
            arrays.append([Int](repeating: 0, count: dwRow+1))
            for dwCol in 0 ... dwRow {
                // 對(duì)數(shù)組進(jìn)行賦值
                arrays[dwRow][dwCol] =  calcTriVal(dwRow, dwCol)
            }
        }
        
        return arrays
    }
}



// MARK: - 測(cè)試代碼:

func pascalsTriangle()  {
    
    let numRows = 6
    var arrays = Solution().generate(numRows)
    
    // 按照要求 打印輸出 非代碼的部分
    print("[")
    for i in 0..<numRows {
        var output = ""
        
        // 拼接空格的個(gè)數(shù)
        for _ in 0..<numRows-i-1 {
            output.append(" ")
        }
        
        // 拼接數(shù)組的其實(shí)標(biāo)志
        output.append("[")
        // 打印不換行
        print("\(output)" ,terminator:"")
        for j in 0...i {
            if j == 0 {
                // 第一個(gè)元素打印
                print("\(arrays[i][j])" ,terminator:"")
            } else {
                // 其余元素打印, 前面加逗號(hào)
                print(",\(arrays[i][j])" ,terminator:"")
            }
            
        }
        // 打印數(shù)組末尾, 換行
        print("]")
        
    }
    print("]")
}



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末恭垦,一起剝皮案震驚了整個(gè)濱河市文兢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌餐弱,老刑警劉巖宴霸,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件囱晴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡瓢谢,警方通過(guò)查閱死者的電腦和手機(jī)畸写,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)氓扛,“玉大人枯芬,你說(shuō)我怎么就攤上這事〔衫桑” “怎么了千所?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)蒜埋。 經(jīng)常有香客問(wèn)我淫痰,道長(zhǎng),這世上最難降的妖魔是什么整份? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任待错,我火速辦了婚禮,結(jié)果婚禮上烈评,老公的妹妹穿的比我還像新娘火俄。我一直安慰自己,他們只是感情好础倍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著胎挎,像睡著了一般沟启。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上犹菇,一...
    開(kāi)封第一講書(shū)人閱讀 49,856評(píng)論 1 290
  • 那天德迹,我揣著相機(jī)與錄音,去河邊找鬼揭芍。 笑死胳搞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的称杨。 我是一名探鬼主播肌毅,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼姑原!你這毒婦竟也來(lái)了悬而?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤锭汛,失蹤者是張志新(化名)和其女友劉穎笨奠,沒(méi)想到半個(gè)月后袭蝗,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡般婆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年到腥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔚袍。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乡范,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出页响,到底是詐尸還是另有隱情篓足,我是刑警寧澤,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布闰蚕,位于F島的核電站栈拖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏没陡。R本人自食惡果不足惜涩哟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望盼玄。 院中可真熱鬧贴彼,春花似錦、人聲如沸埃儿。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)童番。三九已至精钮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剃斧,已是汗流浹背轨香。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幼东,地道東北人臂容。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像根蟹,于是被迫代替她去往敵國(guó)和親脓杉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

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