字典序排數問題

問題:

給定一個整數 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");
}

 

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