# Smallest number greater than or equal to N using only digits 1 to K

Given a number N and an integer K, the task is to find the smallest number greater than or equal to N, formed using only first K non-zero digits( 1, 2, …, K-1, K).

Examples:

Input: N = 124, K = 3
Output: 131
Explanation:
The smallest number greater than or equal to 124, which is only made of digits 1, 2, 3 is 131.

Input: N = 325242, K = 4
Output: 331111

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Naive Approach:
The simplest solution is to start a for loop from N + 1 and find the first number made up of first K digits.

Efficient Solution:

• To obtain an efficient solution, we need to understand the fact that a maximum of 9 digit number can be formed up-to 1010. So, we will iterate over digits of the number in reverse and check:

1. If current digit >= K then, make that digit = 1.
2. If current digit < K and there is no digit greater than K after this, then increment the digit by 1 and copy all the remaining digits as it is.
• Once we have iterated over all the digits and still haven’t found any digit which is less than K then we need to add a digit (1) to the answer.

Below is the implementation of the above approach:

## C++

 `// C++ Program to find the smallest ` `// number greater than or equal ` `// to N which is made up of ` `// first K digits ` `#include ` `using` `namespace` `std; ` ` `  `// Function to count the ` `// digits greater than K ` `int` `CountGreater(``int` `n, ``int` `k) ` `{ ` `    ``int` `a = 0; ` `    ``while` `(n) { ` `        ``if` `((n % 10) > k) { ` `            ``a++; ` `        ``} ` `        ``n = n / 10; ` `    ``} ` `    ``return` `a; ` `} ` ` `  `// Function to print the list ` `int` `PrintList(list<``int``> ans) ` `{ ` `    ``for` `(``auto` `it = ans.begin(); ` `         ``it != ans.end(); it++) ` `        ``cout << *it; ` `} ` ` `  `// Function to find the number ` `// greater than or equal to n, ` `// which is only made of first ` `// k digits ` `void` `getNumber(``int` `n, ``int` `k) ` `{ ` `    ``int` `count = CountGreater(n, k); ` ` `  `    ``// If the number itself ` `    ``// satisfy the conditions ` `    ``if` `(count == 0) { ` `        ``cout << n; ` `        ``return``; ` `    ``} ` ` `  `    ``list<``int``> ans; ` `    ``bool` `changed = ``false``; ` ` `  `    ``// Check digit from back ` `    ``while` `(n > 0) { ` `        ``int` `digit = n % 10; ` `        ``if` `(changed == ``true``) { ` `            ``ans.push_front(digit); ` `        ``} ` `        ``else` `{ ` `            ``// If digit > K is ` `            ``// present previously and ` `            ``// current digit is less ` `            ``// than K ` `            ``if` `(count == 0 && digit < k) { ` `                ``ans.push_front(digit + 1); ` `                ``changed = ``true``; ` `            ``} ` `            ``else` `{ ` `                ``ans.push_front(1); ` `                ``// If current digit is ` `                ``// greater than K ` `                ``if` `(digit > k) { ` `                    ``count--; ` `                ``} ` `            ``} ` `        ``} ` `        ``n = n / 10; ` `    ``} ` ` `  `    ``// If an extra digit needs ` `    ``// to be added ` `    ``if` `(changed == ``false``) { ` `        ``ans.push_front(1); ` `    ``} ` ` `  `    ``// Print the number ` `    ``PrintList(ans); ` ` `  `    ``return``; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `N = 51234; ` `    ``int` `K = 4; ` `    ``getNumber(N, K); ` `    ``return` `0; ` `} `

## Python3

 `# Python3 program to find the smallest  ` `# number greater than or equal  ` `# to N which is made up of  ` `# first K digits  ` ` `  `# Function to count the  ` `# digits greater than K  ` `def` `CountGreater(n, k): ` ` `  `    ``a ``=` `0` `    ``while` `(n > ``0``): ` `        ``if` `((n ``%` `10``) > k): ` `            ``a ``+``=` `1` `             `  `        ``n ``=` `n ``/``/` `10` ` `  `    ``return` `a ` ` `  `# Function to print the list ` `def` `PrintList (ans): ` ` `  `    ``for` `i ``in` `ans: ` `        ``print``(i, end ``=` `'') ` ` `  `# Function to find the number  ` `# greater than or equal to n,  ` `# which is only made of first  ` `# k digits  ` `def` `getNumber(n, k): ` ` `  `    ``count ``=` `CountGreater(n, k) ` `     `  `    ``# If the number itself  ` `    ``# satisfy the conditions  ` `    ``if` `(count ``=``=` `0``): ` `        ``print``(n) ` `        ``return` ` `  `    ``ans ``=` `[] ` `    ``changed ``=` `False` ` `  `    ``# Check digit from back ` `    ``while` `(n > ``0``): ` `        ``digit ``=` `n ``%` `10` `        ``if` `(changed ``=``=` `True``): ` `            ``ans.insert(``0``, digit) ` ` `  `        ``else``: ` `             `  `            ``# If digit > K is  ` `            ``# present previously and  ` `            ``# current digit is less  ` `            ``# than K ` `            ``if` `(count ``=``=` `0` `and` `digit < k): ` `                ``ans.insert(``0``, digit ``+` `1``) ` `                ``changed ``=` `True` ` `  `            ``else``: ` `                ``ans.insert(``0``, ``1``) ` `                 `  `                ``# If current digit is  ` `                ``# greater than K ` `                ``if` `(digit > k): ` `                    ``count ``-``=` `1` ` `  `        ``n ``=` `n ``/``/` `10` ` `  `    ``# If an extra digit needs  ` `    ``# to be added  ` `    ``if` `(changed ``=``=` `False``): ` `        ``ans.insert(``0``, ``1``) ` ` `  `    ``# Print the number ` `    ``PrintList(ans) ` `    ``return` ` `  `# Driver Code ` `N ``=` `51234` `K ``=` `4` ` `  `getNumber(N, K) ` ` `  `# This code is contributed by himanshu77 `

Output:

```111111
```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up