Find the largest number that can be formed by changing at most K digits
Last Updated :
16 Dec, 2022
Given string str representing a number and an integer K, the task is to find the largest number that can be formed by changing at most K digits in the given number.
Examples:
Input: str = “569431”, K = 3
Output: 999931
Replace first, second and fourth digits with 9.
Input: str = “5687”, K = 2
Output: 9987
Approach: In order to get the maximum number possible, leftmost digits must be replaced with 9s. For every digit of the number starting from the leftmost digit, if it is not already 9 and K is greater than 0 then replace it with 9 and decrement K by 1. Repeat these steps for every digit while K is greater than 0. Finally, print the updated number.
Below is the implementation of the above approach:
C++
#include <iostream>
using namespace std;
string findMaximumNum(string str, int n, int k)
{
for ( int i = 0; i < n; i++) {
if (k < 1)
break ;
if (str[i] != '9' ) {
str[i] = '9' ;
k--;
}
}
return str;
}
int main()
{
string str = "569431" ;
int n = str.length();
int k = 3;
cout << findMaximumNum(str, n, k);
return 0;
}
|
Java
import java.io.*;
class GFG
{
static StringBuilder findMaximumNum(StringBuilder str,
int n, int k)
{
for ( int i = 0 ; i < n; i++)
{
if (k < 1 )
break ;
if (str.charAt(i) != '9' )
{
str.setCharAt(i, '9' );
k--;
}
}
return str;
}
public static void main (String [] args)
{
StringBuilder str = new StringBuilder( "569431" );
int n = str.length();
int k = 3 ;
System.out.println(findMaximumNum(str, n, k));
}
}
|
Python3
def findMaximumNum(st, n, k):
for i in range (n):
if (k < 1 ):
break
if (st[i] ! = '9' ):
st = st[ 0 :i] + '9' + st[i + 1 :]
k - = 1
return st
st = "569431"
n = len (st)
k = 3
print (findMaximumNum(st, n, k))
|
C#
using System;
using System.Text;
class GFG
{
static StringBuilder findMaximumNum(StringBuilder str,
int n, int k)
{
for ( int i = 0; i < n; i++)
{
if (k < 1)
break ;
if (str[i] != '9' )
{
str[i] = '9' ;
k--;
}
}
return str;
}
public static void Main ()
{
StringBuilder str = new StringBuilder( "569431" );
int n = str.Length;
int k = 3;
Console.WriteLine(findMaximumNum(str, n, k));
}
}
|
Javascript
<script>
function findMaximumNum(str, n, k) {
for ( var i = 0; i < n; i++) {
if (k < 1) break ;
if (str[i] !== "9" ) {
str[i] = "9" ;
k--;
}
}
return str.join( "" );
}
var str = "569431" ;
var n = str.length;
var k = 3;
document.write(findMaximumNum(str.split( "" ), n, k));
</script>
|
Time Complexity: O(n)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...