# L2:資料鏈路層, 構建冗餘鏈路 : STP(2)
阿新 • • 發佈:2020-12-19
劍指 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) } }