给你一个数n和k
让你把1-----n字典序排列
求出第k个
t<100
n<1000000
题解:
首先我们可以通过n的字典序排序构造出一个10叉树
copy来自其他blog的图片
我们可以根据这个树 进行遍历
遍历有3种操作 *10 /10 +1
用dfs左序遍历也可以过 数据小
AC_code:
/*
Algorithm: 模拟  10叉树 
Author: anthony1314
Creat Time:
Time Complexity:
*/
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
#include<stack>
#include<cstring>
#include<cstdio>
//#include<bits/stdc++.h>
#define ll long long
#define maxn 1005
#define mod 1e9 + 7
#define line printf("--------------");
using namespace std;
int main() {
	int t;
	cin >> t;
	while(t--) {
		int n, k;
		cin >> n >> k;
		int temp = 1;
		while(k > 1) {
			if(temp * 10 <= n) { //////  乘以10
				temp *= 10;
				k--;
			} else {
				if(temp + 1 <= n) {////////   加1
					while(temp % 10 == 9) {
						temp /= 10;
					}
					temp++;
					k--;
				} else {///////    除以10
					temp /= 10;
					while(temp % 10 == 9) {
						temp /= 10;
					}
					temp++;
					k--;
				}
			}
		}
		cout <<temp<< endl;
	}
	return 0;
}
  

 京公网安备 11010502036488号
京公网安备 11010502036488号