字典序排数问题

问题:

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章