輸入數字 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...