Smallest number greater than X which is K-periodic
Last Updated :
31 May, 2021
Given a string integer X consisting of N digits and an integer K, the task is to find the smallest integer greater than or equal to X which is K periodic (K <= N).
Examples:
Input: K = 2, X = “1215”
Output: 1313
Explanation:
1313 is 2-periodic since digits at positions 1, 3 are ‘1’ and digits at positions 2, 4 are ‘3’. This is the smallest 2-periodic integer greater than or equal to “1215”.
Input: K = 3, X = “299398”
Output: 300300
Explanation:
300300 is the smallest possible 3 periodic number.
Approach:
To solve the problem, the idea is to make Xi = Xi-k for all i > K. Then follow the steps below to solve the problem:
- Check if X greater than or equal to the initial integer. If so, then print the current string as the answer.
- Otherwise, traverse from right to left and find the first digit which is not equal to 9. Then increment that digit by 1 and mark the position by a variable called pos.
- Then set all digits after pos up to the Kth digit to 0. Again make Xi = Xi-k for all i >K.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
string Kperiodicinteger(string X, int N,
int K)
{
string temp = X;
for ( int i = 0; i < K; i++)
{
int j = i;
while (j < N) {
X[j] = X[i];
j += K;
}
}
if (X >= temp) {
return X;
}
int POS;
for ( int i = K - 1; i >= 0; i--) {
if (X[i] != '9' ) {
X[i]++;
POS = i;
break ;
}
}
for ( int i = POS + 1; i < K; i++) {
X[i] = '0' ;
}
for ( int i = 0; i < K; i++)
{
int j = i;
while (j < N) {
X[j] = X[i];
j += K;
}
}
return X;
}
int main()
{
int N = 4, K = 2;
string X = "1215" ;
cout << Kperiodicinteger(X, N, K);
return 0;
}
|
Java
import java.util.*;
class GFG{
static String Kperiodicinteger( char []X,
int N, int K)
{
String temp = String.valueOf(X);
for ( int i = 0 ; i < K; i++)
{
int j = i;
while (j < N)
{
X[j] = X[i];
j += K;
}
}
if (String.valueOf(X).compareTo(temp) >= 0 )
{
return String.valueOf(X);
}
int POS = 0 ;
for ( int i = K - 1 ; i >= 0 ; i--)
{
if (X[i] != '9' )
{
X[i]++;
POS = i;
break ;
}
}
for ( int i = POS + 1 ; i < K; i++)
{
X[i] = '0' ;
}
for ( int i = 0 ; i < K; i++)
{
int j = i;
while (j < N)
{
X[j] = X[i];
j += K;
}
}
return String.valueOf(X);
}
public static void main(String[] args)
{
int N = 4 , K = 2 ;
String X = "1215" ;
System.out.print(Kperiodicinteger(
X.toCharArray(), N, K));
}
}
|
Python3
def Kperiodicinteger(X, N, K):
X = list (X)
temp = X.copy()
for i in range (K):
j = i
while (j < N):
X[j] = X[i]
j + = K
if (X > = temp):
return X
POS = 0
for i in range (K - 1 , - 1 , - 1 ):
if (X[i] ! = '9' ):
X[i] = str ( int (X[i]) + 1 )
POS = i
break
for i in range (POS + 1 , K):
X[i] = '0'
for i in range (K):
j = i
while (j < N):
X[j] = X[i]
j + = K
return X
N = 4
K = 2
X = "1215"
print ( * Kperiodicinteger(X, N, K), sep = '')
|
C#
using System;
class GFG{
static String Kperiodicinteger( char [] X,
int N, int K)
{
String temp = String.Join( "" , X);
for ( int i = 0; i < K; i++)
{
int j = i;
while (j < N)
{
X[j] = X[i];
j += K;
}
}
if (String.Join( "" , X).CompareTo(temp) >= 0)
{
return String.Join( "" , X);
}
int POS = 0;
for ( int i = K - 1; i >= 0; i--)
{
if (X[i] != '9' )
{
X[i]++;
POS = i;
break ;
}
}
for ( int i = POS + 1; i < K; i++)
{
X[i] = '0' ;
}
for ( int i = 0; i < K; i++)
{
int j = i;
while (j < N)
{
X[j] = X[i];
j += K;
}
}
return String.Join( "" , X);
}
public static void Main(String[] args)
{
int N = 4, K = 2;
String X = "1215" ;
Console.Write(Kperiodicinteger(
X.ToCharArray(), N, K));
}
}
|
Javascript
<script>
function Kperiodicinteger(X, N, K)
{
var temp = X
for ( var i = 0; i < K; i++)
{
var j = i;
while (j < N) {
X[j] = X[i];
j += K;
}
}
if (parseInt(X.join( '' )) < parseInt(temp.join( '' ))) {
return X.join( '' );
}
var POS;
for ( var i = K - 1; i >= 0; i--) {
if (X[i] != '9' ) {
X[i] = String.fromCharCode(X[i].charCodeAt(0) + 1);
POS = i;
break ;
}
}
for ( var i = POS + 1; i < K; i++) {
X[i] = '0' ;
}
for ( var i = 0; i < K; i++)
{
var j = i;
while (j < N) {
X[j] = X[i];
j += K;
}
}
return X.join( '' );
}
var N = 4, K = 2;
var X = "1215" ;
document.write( Kperiodicinteger(X.split( '' ), N, K));
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(N)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...