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++
// 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
// 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
# 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#
// 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 |
Javascript
<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)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!