Find the largest number that can be formed by changing at most K digits - GeeksforGeeks

13 Mar, 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++
Java
Python3
C#
Javascript
// 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 strstring 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 codeint main(){    string str = "569431";    int n = str.length();    int k = 3;     cout << findMaximumNum(str, n, k);     return 0;}
// Java implementation of the approachclass 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 strdef 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 codest = "569431"n = len(st)k = 3print(findMaximumNum(st, n, k)) # This code is contributed by# divyamohan123
// C# implementation of the approachusing 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)
ihritik
divyamohan123
rdtank
subhammahato348
number-digits
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Merge two sorted arrays
Modulo Operator (%) in C/C++ with Examples
Prime Numbers
Program to find GCD or HCF of two numbers
Sieve of Eratosthenes
Print all possible combinations of r elements in a given array of size n
Program for Decimal to Binary Conversion
The Knight's tour problem | Backtracking-1
Operators in C / C++
Program for factorial of a number