Skip to content
Related Articles

Related Articles

Improve Article

Minimize the number by changing at most K digits

  • Last Updated : 04 Jun, 2021
Geek Week

Given a number N, the task is to minimize the number by changing at most K digits. Note that the number should not contain any leading zeros.
Examples: 
 

Input: N = 91945, K = 3 
Output: 10045
Input: N = 1, K = 0 
Output:
 

 

Approach: 
 

  • Replace the first digit with 1 if its not already 1 and update K accordingly.
  • Now for the rest of the digits, replace the next K – 1 non-zero digits with a 0.

Below is the implementation of the above approach: 
 



C++




// C++ implementation of the approach
#include <iostream>
using namespace std;
 
// Function to return the minimized number
string minNum(string num, int k)
{
 
    // Total digits in the number
    int len = num.length();
 
    // If the string is empty or there
    // are no operations to perform
    if (len == 0 || k == 0)
        return num;
 
    // "0" is a valid number
    if (len == 1)
        return "0";
 
    // If the first digit is not already 1 then
    // update it to 1 and decrement k
    if (num[0] != '1') {
        num[0] = '1';
        k--;
    }
 
    int i = 1;
    // While there are operations left
    // and the number can still be updated
    while (k > 0 && i < len) {
 
        // If the current digit is not already 0
        // then update it to 0 and decrement k
        if (num[i] != '0') {
            num[i] = '0';
            k--;
        }
 
        i++;
    }
 
    // Return the minimised number
    return num;
}
 
// Driver code
int main()
{
    string num = "91945";
    int k = 3;
 
    cout << minNum(num, k);
 
    return 0;
}

Java




// Java implementation of the approach
class GFG
{
     
    // Function to return the minimized number
    static String minNum(char num[], int k)
    {
     
        // Total digits in the number
        int len = num.length;
     
        // If the string is empty or there
        // are no operations to perform
        if (len == 0 || k == 0)
        {
            String num_str = new String(num);
            return num_str;
        }
     
        // "0" is a valid number
        if (len == 1)
            return "0";
     
        // If the first digit is not already 1 then
        // update it to 1 and decrement k
        if (num[0] != '1')
        {
            num[0] = '1';
            k--;
        }
     
        int i = 1;
         
        // While there are operations left
        // and the number can still be updated
        while (k > 0 && i < len)
        {
     
            // If the current digit is not already 0
            // then update it to 0 and decrement k
            if (num[i] != '0')
            {
                num[i] = '0';
                k--;
            }
            i++;
        }
         
        String num_str = new String(num);
         
        // Return the minimised number
        return num_str;
    }
     
    // Driver code
    public static void main(String args[])
    {
        String num = "91945";
        int k = 3;
     
        System.out.println(minNum(num.toCharArray(), k));
    }
}
 
// This code is contributed by AnkitRai01

Python3




# Python 3 implementation of the approach
 
# Function to return the minimized number
def minNum(num, k) :
 
    # Total digits in the number
    len_ = len(num)
 
    # If the string is empty or there
    # are no operations to perform
    if len_ == 0 or k == 0 :
        return num
 
    # "0" is a valid number
    if len_ == 1:
        return "0"
 
    # If the first digit is not already 1 then
    # update it to 1 and decrement k
    if num[0] != '1' :
        num = '1' + num[1:]
        k -= 1
 
    i = 1
     
    # While there are operations left
    # and the number can still be updated
    while k > 0 and i < len_ :
 
        # If the current digit is not already 0
        # then update it to 0 and decrement k
        if num[i] != '0' :
            num = num[:i] + '0' + num[i + 1:]
            k -= 1
 
        i += 1
  
    # Return the minimised number
    return num
 
# Driver code
num = "91945"
k = 3
 
print(minNum(num, k))
 
# This code is contributed by divyamohan123

C#




// C# implementation of the approach
using System;
     
class GFG
{
     
    // Function to return the minimized number
    static String minNum(char []num, int k)
    {
     
        // Total digits in the number
        int len = num.Length;
     
        // If the string is empty or there
        // are no operations to perform
        if (len == 0 || k == 0)
        {
            return String.Join("", num);
        }
     
        // "0" is a valid number
        if (len == 1)
            return "0";
     
        // If the first digit is not already 1 then
        // update it to 1 and decrement k
        if (num[0] != '1')
        {
            num[0] = '1';
            k--;
        }
     
        int i = 1;
         
        // While there are operations left
        // and the number can still be updated
        while (k > 0 && i < len)
        {
     
            // If the current digit is not already 0
            // then update it to 0 and decrement k
            if (num[i] != '0')
            {
                num[i] = '0';
                k--;
            }
            i++;
        }
         
        // Return the minimised number
        return String.Join("", num);
    }
     
    // Driver code
    public static void Main(String []args)
    {
        String num = "91945";
        int k = 3;
     
        Console.WriteLine(minNum(num.ToCharArray(), k));
    }
}
 
// This code is contributed by 29AjayKumar

Javascript




<script>
// Javascript implementation of the approach
 
// Function to return the minimized number
function minNum(num, k)
{
 
    // Total digits in the number
    let len = num.length;
 
    // If the string is empty or there
    // are no operations to perform
    if (len == 0 || k == 0) {
        let num_str = num.join("");
        return num_str;
    }
 
    // "0" is a valid number
    if (len == 1)
        return "0";
 
    // If the first digit is not already 1 then
    // update it to 1 and decrement k
    if (num[0] != '1') {
        num[0] = '1';
        k--;
    }
 
    let i = 1;
 
    // While there are operations left
    // and the number can still be updated
    while (k > 0 && i < len) {
 
        // If the current digit is not already 0
        // then update it to 0 and decrement k
        if (num[i] != '0') {
            num[i] = '0';
            k--;
        }
        i++;
    }
 
    let num_str = num.join("");
 
    // Return the minimised number
    return num_str;
}
 
// Driver code
let num = "91945";
let k = 3;
 
document.write(minNum(num.split(""), k));
 
// This code is contributed by _saurabh_jaiswal.
</script>
Output: 
10045

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :