问题:
给定一个整数 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");
}