剑指offer-打印1到最大的N位数

剑指offer-打印1到最大的N位数

一、题目描述

输入数字n,按顺序打印出从1到最大的n位十进制数。例如输入3,则打印1、2、3 … 一直到最大的3位数999.

二、题解

设置一个N位数的数组,使用全排列给数组赋值即可。因为个位数要不断变化,所以个位数的赋值应该在递归的最底层。一种递归实现如下所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
func Print1ToMaxDigits(n int) {
if n <= 0 {
return
}
number := make([]int, n)
for i := 0; i < 10; i++ {
number[0] = i
Print1ToMaxDigitsRecursively(number, n, 0)
}
}

func Print1ToMaxDigitsRecursively(number []int, length int, index int) {
if index == length-1 {
printNumber(number)
return
}
for i := 0; i < 10; i++ {
number[index+1] = i
Print1ToMaxDigitsRecursively(number, length, index+1)
}
}

func printNumber(number []int) {
var isBeginning0 = true
length := len(number)
for i := 0; i < length; i++ {
if isBeginning0 && number[i] != 0 {
isBeginning0 = false
}
if !isBeginning0 {
fmt.Printf("%d", number[i])
if i == length-1 {
fmt.Println() // 换行操作
}
}
}
}
评论

:D 一言句子获取中...

加载中,最新评论有1分钟缓存...