Largest number possible after removal of K digits
Last Updated :
17 Oct, 2022
Given a positive number N, the target is to find the largest number that can be formed after removing any K digits from N.
Examples:
Input: N = 6358, K = 1
Output: 658
Input: N = 2589, K = 2
Output: 89
Approach:
- Iterate a loop K times.
- During every iteration, remove every digit from the current value of N once and store the maximum of all the numbers obtained.
- In order to achieve this, we store the maximum of (N / (i * 10)) * i + (N % i) where i ranges from [1, 10l – 1] where l denotes the number of digits of the current value of N.
- Consider this maximum as the current value of N and proceed to the next iteration and repeat the above step.
- Thus, after every iteration, we have the least digit from the current value of N removed. On repeating the process K times, we obtain the largest number possible.
For example:
Let us analyze this approach for N = 6358, K = 1
The different possibilities after removal of every digit once are as follows:
(6358 / 10) * 1 + 6358 % 1 = 635 + 0 = 635
(6358 / 100) * 10 + 6358 % 10 = 630 + 8 = 638
(6358 / 1000) * 100 + 6358 % 100 = 600 + 58 = 658
(6358 / 10000) * 1000 + 6358 % 1000 = 0 + 358 = 358
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int maxnumber( int n, int k)
{
for ( int j = 0; j < k; j++) {
int ans = 0;
int i = 1;
while (n / i > 0) {
int temp = (n / (i * 10))
* i
+ (n % i);
i *= 10;
ans = max(ans, temp);
}
n = ans;
}
return n;
}
int main()
{
int n = 6358;
int k = 1;
cout << maxnumber(n, k) << endl;
return 0;
}
|
Java
import java.util.*;
import java.math.*;
class GFG {
static int maxnumber( int n, int k)
{
for ( int j = 0 ; j < k; j++) {
int ans = 0 ;
int i = 1 ;
while (n / i > 0 ) {
int temp = (n / (i * 10 ))
* i
+ (n % i);
i *= 10 ;
ans = Math.max(ans, temp);
}
n = ans;
}
return n;
}
public static void main(String[] args)
{
int n = 6358 ;
int k = 1 ;
System.out.println(maxnumber(n, k));
}
}
|
Python3
def maxnumber(n, k):
for i in range ( 0 , k):
ans = 0
i = 1
while n / / i > 0 :
temp = (n / / (i * 10 )) * i + (n % i)
i * = 10
if temp > ans:
ans = temp
n = ans
return ans;
n = 6358
k = 1
print (maxnumber(n, k))
|
C#
using System;
class GFG {
static int maxnumber( int n, int k)
{
for ( int j = 0; j < k; j++) {
int ans = 0;
int i = 1;
while (n / i > 0) {
int temp = (n / (i * 10))
* i
+ (n % i);
i *= 10;
if (temp > ans)
ans = temp;
}
n = ans;
}
return n;
}
static public void Main()
{
int n = 6358;
int k = 1;
Console.WriteLine(maxnumber(n, k));
}
}
|
Javascript
<script>
function maxnumber(n, k)
{
for ( var j = 0; j < k; j++) {
var ans = 0;
var i = 1;
while (parseInt(n / i) > 0) {
var temp = parseInt(n / (i * 10))
* i
+ (n % i);
i *= 10;
ans = Math.max(ans, temp);
}
n = ans;
}
return n;
}
var n = 6358;
var k = 1;
document.write( maxnumber(n, k));
</script>
|
Time Complexity: O(K*log10N)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...