劍指Offer算法題-打印從1到最大的n位數(shù)

題目

輸入數(shù)字n,按順序打印出從1到n最大的n位十進(jìn)制數(shù)。比如輸入3,則打印1、2、3一直到最大的3位數(shù)999

方案

看到題目,首先想到先求出最大的n位數(shù)(maxN),然后從1開(kāi)始遍歷到maxN.但是這里有個(gè)陷進(jìn),就是maxN有可能超出Int或者long long表示的最大數(shù)的范圍,這個(gè)時(shí)候回發(fā)生溢出錯(cuò)誤。

所以這個(gè)時(shí)候要選擇合適的類(lèi)型來(lái)表示maxN,我這里選擇的是用Array來(lái)表示maxN,最高位放到數(shù)組的最前面。以四位數(shù)舉例,585可以表示為[0,5,8,5],

用數(shù)組表示maxN之后,面臨著三個(gè)問(wèn)題:

  1. 輸出打印
    這個(gè)時(shí)候只需要遍歷數(shù)組,把前面的0去掉即可

  2. 加1
    對(duì)數(shù)組進(jìn)行倒序遍歷,對(duì)后位進(jìn)行+1,若結(jié)果大于9,則把該位置0,繼續(xù)對(duì)前面的數(shù)進(jìn)行+1,若結(jié)果不大于9,則把結(jié)果賦值給當(dāng)前位并停止遍歷

  3. 何時(shí)停止
    若數(shù)組的首位進(jìn)行進(jìn)位時(shí),則表示已經(jīng)遍歷了最大值,需要停止循環(huán)

代碼Swift

func printOneToMaxOfDigits(digitNumber:Int) {
    //初始化一個(gè)全為0的長(zhǎng)度為digitNumber的數(shù)組
    var array = Array(repeating: 0, count: digitNumber)
    //相當(dāng)于生成一個(gè)從digitNumber-1到0的一個(gè)序列
    let strideTo = stride(from: digitNumber - 1, to: -1, by: -1)
    
   //對(duì)數(shù)組進(jìn)行加1的函數(shù),若返回false則代表已經(jīng)超出最大值,可以停止了
    func addOne() -> Bool{
        for index in strideTo {
            if array[index] + 1 > 9 {
                array[index] = 0
                if index == 0 {
                    return false
                }
            }else {
                array[index] = array[index] + 1
                break
            }
        }
        return true
    }

    //對(duì)數(shù)組進(jìn)行打印
    func printArray() {
        var result = ""
        var isAppend = false
        for item in array {
            if isAppend || item != 0 {
                result += "\(item)"
                isAppend = true
            }
        }
        print(result)
    }


    //調(diào)用加1方法,知道加1方法返回false
    while addOne() {
        printArray()
    }
}
printOneToMaxOfDigits(digitNumber: 5)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容