Given two positive integers n and k, print all increasing sequences of length k such that the elements in every sequence are from the first n natural numbers.
Examples:
Input: k = 2, n = 3
Output: 1 2
1 3
2 3
Input: k = 5, n = 5
Output: 1 2 3 4 5
Input: k = 3, n = 5
Output: 1 2 3
1 2 4
1 2 5
1 3 4
1 3 5
1 4 5
2 3 4
2 3 5
2 4 5
3 4 5
We strongly recommend minimizing the browser and trying this yourself first.
It’s a good recursion question. The idea is to create an array of lengths k. The array stores the current sequence. For every position in the array, we check the previous element and one by one put all elements greater than the previous element. If there is no previous element (first position), we put all numbers from 1 to n.
Below is the implementation of the above idea :
C++
#include<iostream>
using namespace std;
void printArr( int arr[], int k)
{
for ( int i=0; i<k; i++)
cout << arr[i] << " " ;
cout << endl;
}
void printSeqUtil( int n, int k, int &len, int arr[])
{
if (len == k)
{
printArr(arr, k);
return ;
}
int i = (len == 0)? 1 : arr[len-1] + 1;
len++;
while (i<=n)
{
arr[len-1] = i;
printSeqUtil(n, k, len, arr);
i++;
}
len--;
}
void printSeq( int n, int k)
{
int arr[k];
int len = 0;
printSeqUtil(n, k, len, arr);
}
int main()
{
int k = 3, n = 7;
printSeq(n, k);
return 0;
}
|
Java
class GFG {
static void printArr( int [] arr, int k)
{
for ( int i = 0 ; i < k; i++)
System.out.print(arr[i] + " " );
System.out.print( "\n" );
}
static void printSeqUtil( int n, int k,
int len, int [] arr)
{
if (len == k)
{
printArr(arr, k);
return ;
}
int i = (len == 0 ) ? 1 : arr[len - 1 ] + 1 ;
len++;
while (i <= n)
{
arr[len - 1 ] = i;
printSeqUtil(n, k, len, arr);
i++;
}
len--;
}
static void printSeq( int n, int k)
{
int [] arr = new int [k];
int len = 0 ;
printSeqUtil(n, k, len, arr);
}
static public void main (String[] args)
{
int k = 3 , n = 7 ;
printSeq(n, k);
}
}
|
Python3
def printArr(arr, k):
for i in range (k):
print (arr[i], end = " " );
print ();
def printSeqUtil(n, k,len1, arr):
if (len1 = = k):
printArr(arr, k);
return ;
i = 1 if (len1 = = 0 ) else (arr[len1 - 1 ] + 1 );
len1 + = 1 ;
while (i < = n):
arr[len1 - 1 ] = i;
printSeqUtil(n, k, len1, arr);
i + = 1 ;
len1 - = 1 ;
def printSeq(n, k):
arr = [ 0 ] * k;
len1 = 0 ;
printSeqUtil(n, k, len1, arr);
k = 3 ;
n = 7 ;
printSeq(n, k);
|
C#
using System;
class GFG {
static void printArr( int [] arr, int k)
{
for ( int i = 0; i < k; i++)
Console.Write(arr[i] + " " );
Console.WriteLine();
}
static void printSeqUtil( int n, int k,
int len, int [] arr)
{
if (len == k)
{
printArr(arr, k);
return ;
}
int i = (len == 0) ? 1 : arr[len - 1] + 1;
len++;
while (i <= n)
{
arr[len - 1] = i;
printSeqUtil(n, k, len, arr);
i++;
}
len--;
}
static void printSeq( int n, int k)
{
int [] arr = new int [k];
int len = 0;
printSeqUtil(n, k, len, arr);
}
static public void Main ()
{
int k = 3, n = 7;
printSeq(n, k);
}
}
|
PHP
<?php
function printArr( $arr , $k )
{
for ( $i = 0; $i < $k ; $i ++)
echo $arr [ $i ], " " ;
echo "\n" ;
}
function printSeqUtil( $n , $k ,
$len , $arr )
{
if ( $len == $k )
{
printArr( $arr , $k );
return ;
}
$i = ( $len == 0)? 1 :
$arr [ $len - 1] + 1;
$len ++;
while ( $i <= $n )
{
$arr [ $len -1] = $i ;
printSeqUtil( $n , $k ,
$len , $arr );
$i ++;
}
$len --;
}
function printSeq( $n , $k )
{
$arr = array ();
$len = 0;
printSeqUtil( $n , $k ,
$len , $arr );
}
$k = 3;
$n = 7;
printSeq( $n , $k );
?>
|
Javascript
<script>
function printArr(arr, k)
{
for (let i = 0; i < k; i++)
document.write(arr[i] + " " );
document.write( "</br>" );
}
function printSeqUtil(n, k, len, arr)
{
if (len == k)
{
printArr(arr, k);
return ;
}
let i = (len == 0) ? 1 : arr[len - 1] + 1;
len++;
while (i <= n)
{
arr[len - 1] = i;
printSeqUtil(n, k, len, arr);
i++;
}
len--;
}
function printSeq(n, k)
{
let arr = new Array(k);
let len = 0;
printSeqUtil(n, k, len, arr);
}
let k = 3, n = 7;
printSeq(n, k);
</script>
|
Output:
1 2 3
1 2 4
1 2 5
1 2 6
1 2 7
1 3 4
1 3 5
1 3 6
1 3 7
1 4 5
1 4 6
1 4 7
1 5 6
1 5 7
1 6 7
2 3 4
2 3 5
2 3 6
2 3 7
2 4 5
2 4 6
2 4 7
2 5 6
2 5 7
2 6 7
3 4 5
3 4 6
3 4 7
3 5 6
3 5 7
3 6 7
4 5 6
4 5 7
4 6 7
5 6 7
Time Complexity: O(n*n!), as there are n! permutations and it requires O(n) time to print a permutation. T(n) = n * T(n-1) + O(1) when reduced will result in O(n*n!) time.
Auxiliary Space: O(n)
This article is contributed by Arjun. Please write comments if you find anything incorrect, or if you want to share more information about the topic discussed above