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++ implementation of the approach #include <iostream> using namespace std;
// Function to return the maximum number // that can be formed by changing // at most k digits in str string findMaximumNum(string str, int n, int k)
{ // For every digit of the number
for ( int i = 0; i < n; i++) {
// If no more digits can be replaced
if (k < 1)
break ;
// If current digit is not already 9
if (str[i] != '9' ) {
// Replace it with 9
str[i] = '9' ;
// One digit has been used
k--;
}
}
return str;
} // Driver code int main()
{ string str = "569431" ;
int n = str.length();
int k = 3;
cout << findMaximumNum(str, n, k);
return 0;
} |
// Java implementation of the approach import java.io.*;
class GFG
{ // Function to return the maximum number
// that can be formed by changing
// at most k digits in str
static StringBuilder findMaximumNum(StringBuilder str,
int n, int k)
{
// For every digit of the number
for ( int i = 0 ; i < n; i++)
{
// If no more digits can be replaced
if (k < 1 )
break ;
// If current digit is not already 9
if (str.charAt(i) != '9' )
{
// Replace it with 9
str.setCharAt(i, '9' );
// One digit has been used
k--;
}
}
return str;
}
// Driver code
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));
}
} // This code is contributed by ihritik |
# Python3 implementation of the approach # Function to return the maximum number # that can be formed by changing # at most k digits in str def findMaximumNum(st, n, k):
# For every digit of the number
for i in range (n):
# If no more digits can be replaced
if (k < 1 ):
break
# If current digit is not already 9
if (st[i] ! = '9' ):
# Replace it with 9
st = st[ 0 :i] + '9' + st[i + 1 :]
# One digit has been used
k - = 1
return st
# Driver code st = "569431"
n = len (st)
k = 3
print (findMaximumNum(st, n, k))
# This code is contributed by # divyamohan123 |
// C# implementation of the approach using System;
using System.Text;
class GFG
{ // Function to return the maximum number
// that can be formed by changing
// at most k digits in str
static StringBuilder findMaximumNum(StringBuilder str,
int n, int k)
{
// For every digit of the number
for ( int i = 0; i < n; i++)
{
// If no more digits can be replaced
if (k < 1)
break ;
// If current digit is not already 9
if (str[i] != '9' )
{
// Replace it with 9
str[i] = '9' ;
// One digit has been used
k--;
}
}
return str;
}
// Driver code
public static void Main ()
{
StringBuilder str = new StringBuilder( "569431" );
int n = str.Length;
int k = 3;
Console.WriteLine(findMaximumNum(str, n, k));
}
} // This code is contributed by ihritik |
<script> // JavaScript implementation of the approach
// Function to return the maximum number
// that can be formed by changing
// at most k digits in str
function findMaximumNum(str, n, k) {
// For every digit of the number
for ( var i = 0; i < n; i++) {
// If no more digits can be replaced
if (k < 1) break ;
// If current digit is not already 9
if (str[i] !== "9" ) {
// Replace it with 9
str[i] = "9" ;
// One digit has been used
k--;
}
}
return str.join( "" );
}
// Driver code
var str = "569431" ;
var n = str.length;
var k = 3;
document.write(findMaximumNum(str.split( "" ), n, k));
</script>
|
999931
Time Complexity: O(n)
Auxiliary Space: O(1)