题目大意:
把 1~15 的数字典序排序后为 1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9
此时给定 n k, 求1~n的数组字典序排序后 第k个数是什么
题解
枚举数的第一位 搜下去继续枚举下一位 直到超过n就回溯
先序遍历到第k个输出
#include <bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f #define LL long long #define mem(i,j) memset(i,j,sizeof(i)) #define inc(i,j,k) for(int i=j;i<=k;i++) #define dec(i,j,k) for(int i=j;i>=k;i--) #define gcd(i,j) __gcd(i,j) const int N=1e6+5; const int mod=192600817; int n,k; bool OK; int c; void DFS(int u) { if(OK) return; c++; if(c==k) { printf("%d ",u); OK=1; return; } inc(i,0,9) { int v=u*10+i; if(v>n) return; DFS(v); } } int main() { int _; scanf("%d",&_); while(_--) { scanf("%d%d",&n,&k); OK=0; c=0; inc(i,1,9) DFS(i); } return 0; }