给定一个非负数n和一个值k 。找出可以使用给定数字n的数字形成的第k个最小数字。确保可以形成第k个最小的数字。请注意,该数字可能非常大,甚至可能不适合long long int。
例子:
Input : n = 1234, k = 2
Output : 1243
Input : n = 36012679802, k = 4
Output : 10022366897
这个想法是首先对数字排序并找到最小的数字,然后从最小的数字开始找到第k个排列。为了对数字进行排序,我们使用频率计数技术,因为数字的数量很小。
// C++ implementation to get the kth smallest
// number using the digits of the given number
#include
using namespace std;
// function to get the smallest digit in 'num'
// which is greater than 0
char getSmallDgtGreaterThanZero(string num, int n)
{
// 's_dgt' to store the smallest digit
// greater than 0
char s_dgt = '9';
for (int i=0; i
输出:
10022366897