Minimize the number by changing at most K digits
Last Updated :
20 Dec, 2022
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: 1
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++
#include <iostream>
using namespace std;
string minNum(string num, int k)
{
int len = num.length();
if (len == 0 || k == 0)
return num;
if (len == 1)
return "0" ;
if (num[0] != '1' ) {
num[0] = '1' ;
k--;
}
int i = 1;
while (k > 0 && i < len) {
if (num[i] != '0' ) {
num[i] = '0' ;
k--;
}
i++;
}
return num;
}
int main()
{
string num = "91945" ;
int k = 3;
cout << minNum(num, k);
return 0;
}
|
Java
import java.io.*;
public class GFG
{
static String minNum( char num[], int k)
{
int len = num.length;
if (len == 0 || k == 0 )
{
String num_str = new String(num);
return num_str;
}
if (len == 1 )
return "0" ;
if (num[ 0 ] != '1' )
{
num[ 0 ] = '1' ;
k--;
}
int i = 1 ;
while (k > 0 && i < len)
{
if (num[i] != '0' )
{
num[i] = '0' ;
k--;
}
i++;
}
String num_str = new String(num);
return num_str;
}
public static void main(String args[])
{
String num = "91945" ;
int k = 3 ;
System.out.println(minNum(num.toCharArray(), k));
}
}
|
Python3
def minNum(num, k) :
len_ = len (num)
if len_ = = 0 or k = = 0 :
return num
if len_ = = 1 :
return "0"
if num[ 0 ] ! = '1' :
num = '1' + num[ 1 :]
k - = 1
i = 1
while k > 0 and i < len_ :
if num[i] ! = '0' :
num = num[:i] + '0' + num[i + 1 :]
k - = 1
i + = 1
return num
num = "91945"
k = 3
print (minNum(num, k))
|
C#
using System;
class GFG
{
static String minNum( char []num, int k)
{
int len = num.Length;
if (len == 0 || k == 0)
{
return String.Join( "" , num);
}
if (len == 1)
return "0" ;
if (num[0] != '1' )
{
num[0] = '1' ;
k--;
}
int i = 1;
while (k > 0 && i < len)
{
if (num[i] != '0' )
{
num[i] = '0' ;
k--;
}
i++;
}
return String.Join( "" , num);
}
public static void Main(String []args)
{
String num = "91945" ;
int k = 3;
Console.WriteLine(minNum(num.ToCharArray(), k));
}
}
|
Javascript
<script>
function minNum(num, k)
{
let len = num.length;
if (len == 0 || k == 0) {
let num_str = num.join( "" );
return num_str;
}
if (len == 1)
return "0" ;
if (num[0] != '1' ) {
num[0] = '1' ;
k--;
}
let i = 1;
while (k > 0 && i < len) {
if (num[i] != '0' ) {
num[i] = '0' ;
k--;
}
i++;
}
let num_str = num.join( "" );
return num_str;
}
let num = "91945" ;
let k = 3;
document.write(minNum(num.split( "" ), k));
</script>
|
Time Complexity: O(min(k, |num|))
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...