問題:
給定一個整數 n, 返回從 1 到 n 的字典順序。
例如,給定 n =13,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。
請儘可能的優化算法的時間複雜度和空間複雜度。輸入的數據 n 小於等於 5,000,000。
首先知道什麼是字典序
即:我們可以把它看成有9棵樹,每棵樹的根節點的值分別是從1到9,並且每棵樹都有10個子節點,並且每個子節點又會有10個子節點……
本題代碼編寫
1,可以通過像上圖一樣,將n個數按照樹結構存入,然後再通過樹的遍歷進行運算,最後得出結果
2,直接通過遞歸的方法進行代碼編寫
#include<iostream>
#include<stdlib.h>
using namespace std;
void show(int n, int m)
{
if (m > n)
{
return;
}
cout << m << " ";
for (int i = 1; i <= 10; i++) //遞歸部分
{
show(n, m * 10 + i - 1);
}
}
int main()
{
int n;
cout << "輸入n的值:n=";
cin >> n;
for (int i = 1; i <= 9; i++)
{
show(n, i);
}
system("pause");
}