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

2021-10-08 11:09:32 字數 1359 閱讀 5353

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

示例 1:

輸入: n = 1

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

說明:用返回乙個整數列表來代替列印

n 為正整數

python

# 思路:

# 本題考查大數越界,需要轉為字串儲存運算,採用遞迴全排列最優

# 複雜度:

# o(10^n)

class

solution

:def

printnumbers

(self, n:

int)

-> list[

int]

:def

dfs(x)

:if x==n:

s=''.join(num[self.start:])

if s!=

'0'int

(s))

if n-self.start==self.nine: self.start-=

1return

# 從高位到低位遞迴全排列

for i in

range(10

):if i==

9: self.nine+=

1 num[x]

=str

(i) dfs(x+1)

self.nine-=

1

num, res=

['0'

]*n,

self.nine=

0 self.start=n-

1 dfs(0)

return res

c++
class

solution

string tmp

(n,'9');

for(

int j =

0; j < n; j++

) str +

= num[j];if

(str == tmp)

return

;for

(int i =

0; i < n; i++

)dfs

(res, n, num, n-1)

;}vector

printnumbers

(int n)

;dfs

(res, n, num, n -1)

;delete

num;

return

*res;}}

;

劍指offer 面試題17 列印從1到最大的n位數

輸入數字n,按順序列印出從1到最大的n位十進位制數,比如輸入3,則列印出1,2,3一直到最大的3位數即999 首先考慮n的範圍,當輸入n很大的時候,我們求最大的n位數用int或者long都會溢位。最常用也是最容易的方法是用字串或者陣列表達大數。我們用字串來解決大數問題。public void pri...

劍指offer17 列印從1到最大的n位數

題目 輸入數字n,按順序列印從1到最大的n為十進位制數。比如輸入3,則列印出1,2,3一直到最大的3位數999。看到這個問題之後,最容易想到的辦法就是先求出最大的n位數,然後用乙個迴圈從1開始逐個列印。於是很容易寫出以下 void print1tomaxofndigits 1 int n for i...

劍指offer 面試題17 列印從1到最大的n位數

問題 輸入數字n,按順序列印出從1到最大的n位十進位制數。輸入 n 輸出 列印數字 思路1 易錯思路 求出最大的n位十進位制數,然後for迴圈列印。錯誤原因 最大的n位十進位制數有可能超出int型 或longlong型 利用陣列 或字串 來表達大數。include include using nam...