1. 程式人生 > 實用技巧 ># L2:資料鏈路層, 構建冗餘鏈路 : STP(2)

# L2:資料鏈路層, 構建冗餘鏈路 : STP(2)

劍指 Offer 17. 列印從1到最大的n位數

地址:劍指 Offer 17. 列印從1到最大的n位數

問題描述:

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

示例 1:

輸入: n = 1
輸出: [1,2,3,4,5,6,7,8,9]

說明:

用返回一個整數列表來代替列印
n 為正整數

import scala.collection.mutable.ListBuffer
object Solution {
    def printNumbers(n: Int): Array[Int] = {
        val number = Array.fill(n)("0")
        val res = ListBuffer[Int]()
		
        //利用陣列 模擬數 構成全排列
        for (i <- 0 to 9) {
            number(0) = i.toString
            dfs(res, number, n, 0)
        }
        
        //把第一個零去掉
        return res.drop(1).toArray
    }

    def dfs(res: ListBuffer[Int], number: Array[String], length: Int, index: Int) {
        //鋪滿陣列
        if (index == length-1) {
            val ans = number.mkString.toInt
            res.append(ans)
            return
        }
        
        for(i <- 0 to 9) {
            number(index+1) = i.toString
            dfs(res, number, length, index+1)
        }

    }
}
import "fmt"
var charNum = [10]byte{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}
var res []int

func printNumbers(n int) []int {
    num := make([]byte, n)
    res = make([]int, 0)

    for _, v := range charNum {
        num[0] = v
        dfs(num, n, 0)
    }

    return res[1:]
}

func dfs(num []byte, length, index int) {
    if index == length - 1 {
        val, _ := strconv.Atoi(string(num))
        //fmt.Printf("val: %d\n", val)
        //if err != nil {
        //    res = append(res, val)
        //}
        res = append(res, val)
        //fmt.Printf("res: %v\n", res)
        return 
    }

    for _, v := range charNum {
        num[index + 1] = v
        dfs(num, length, index+1)
    }
}