Given three integer n, m and k, the task is to find the smallest integer > n such that digit m appears exactly k times in it.
Examples:
Input: n = 111, m = 2, k = 2
Output: 122
Input: n = 111, m = 2, k = 3
Output: 222
Approach: Start iterating from n + 1 and for each integer i check whether it consists of digit m exactly k times. This way smallest integer > n with digit m occurring exactly k times can be found.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
bool digitWell( int n, int m, int k)
{
int cnt = 0;
while (n > 0) {
if (n % 10 == m)
++cnt;
n /= 10;
}
return cnt == k;
}
int findInt( int n, int m, int k)
{
int i = n + 1;
while ( true ) {
if (digitWell(i, m, k))
return i;
i++;
}
}
int main()
{
int n = 111, m = 2, k = 2;
cout << findInt(n, m, k);
return 0;
}
|
Java
import java.io.*;
class GFG
{
static boolean digitWell( int n, int m, int k)
{
int cnt = 0 ;
while (n > 0 )
{
if (n % 10 == m)
++cnt;
n /= 10 ;
}
return cnt == k;
}
static int findInt( int n, int m, int k)
{
int i = n + 1 ;
while ( true )
{
if (digitWell(i, m, k))
return i;
i++;
}
}
public static void main(String[] args)
{
int n = 111 , m = 2 , k = 2 ;
System.out.println(findInt(n, m, k));
}
}
|
Python3
def digitWell(n, m, k):
cnt = 0
while (n > 0 ):
if (n % 10 = = m):
cnt = cnt + 1 ;
n = ( int )(n / 10 );
return cnt = = k;
def findInt(n, m, k):
i = n + 1 ;
while ( True ):
if (digitWell(i, m, k)):
return i;
i = i + 1 ;
n = 111 ; m = 2 ; k = 2 ;
print (findInt(n, m, k));
|
C#
using System;
class GFG
{
static bool digitWell( int n, int m, int k)
{
int cnt = 0;
while (n > 0)
{
if (n % 10 == m)
++cnt;
n /= 10;
}
return cnt == k;
}
static int findInt( int n, int m, int k)
{
int i = n + 1;
while ( true )
{
if (digitWell(i, m, k))
return i;
i++;
}
}
public static void Main()
{
int n = 111, m = 2, k = 2;
Console.WriteLine(findInt(n, m, k));
}
}
|
PHP
<?php
function digitWell( $n , $m , $k )
{
$cnt = 0;
while ( $n > 0)
{
if ( $n % 10 == $m )
++ $cnt ;
$n = floor ( $n / 10);
}
return $cnt == $k ;
}
function findInt( $n , $m , $k )
{
$i = $n + 1;
while (true)
{
if (digitWell( $i , $m , $k ))
return $i ;
$i ++;
}
}
$n = 111;
$m = 2;
$k = 2;
echo findInt( $n , $m , $k );
?>
|
Javascript
<script>
function digitWell(n, m, k)
{
var cnt = 0;
while (n > 0) {
if (n % 10 == m)
++cnt;
n = Math.floor(n/10);
}
if (cnt == k)
return true ;
else
return false ;
}
function findInt(n, m, k)
{
var i = n + 1;
while ( true ) {
if (digitWell(i, m, k))
return i;
i++;
}
}
var n = 111, m = 2, k = 2;
document.write(findInt(n, m, k));
</script>
|
Time Complexity: O(n * log10n)
Auxiliary Space: O(1), since no extra space has been taken.