Open In App

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

Improve
Improve
Like Article
Like
Save
Share
Report

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>


Output: 

999931

 

Time Complexity: O(n)
Auxiliary Space: O(1)



Last Updated : 16 Dec, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads