Given a number N. The task is to find the number of integers from 1 to n which contains digits 0’s and 1’s only.
Examples:
Input : N = 15
Output : 3
Explanation : 1, 10, 11 are such integers.
Input : N = 120
Output : 7
Explanation : 1, 10, 11, 100, 101, 110, 111
are such integers.
Approach: An efficient approach is to build integers which contain 1’s and 0’s only using a recursive function starting from the number 1. For each number check whether it is less than n or not.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int countNumbers( int x, int n)
{
if (x > n)
return 0;
return 1 + countNumbers(x * 10, n) + countNumbers(x * 10 + 1, n);
}
int main()
{
int n = 120;
cout << countNumbers(1, n);
return 0;
}
|
Java
class GFG
{
static int countNumbers( int x, int n)
{
if (x > n)
return 0 ;
return 1 + countNumbers(x * 10 , n) + countNumbers(x * 10 + 1 , n);
}
public static void main (String[] args)
{
int n = 120 ;
System.out.println(countNumbers( 1 , n));
}
}
|
Python3
def countNumbers(x, n):
if x > n :
return 0
return ( 1 + countNumbers(x * 10 , n) +
countNumbers(x * 10 + 1 , n))
if __name__ = = '__main__' :
n = 120 ;
print (countNumbers( 1 , n));
|
C#
using System;
class GFG
{
static int countNumbers( int x, int n)
{
if (x > n)
return 0;
return 1 + countNumbers(x * 10, n) +
countNumbers(x * 10 + 1, n);
}
public static void Main()
{
int n = 120;
Console.WriteLine(countNumbers(1, n));
}
}
|
PHP
<?php
function countNumbers( $x , $n )
{
if ( $x > $n )
return 0;
return 1 + countNumbers( $x * 10, $n ) +
countNumbers( $x * 10 + 1, $n );
}
$n = 120;
echo (countNumbers(1, $n ));
?>
|
Javascript
<script>
function countNumbers(x, n)
{
if (x > n)
return 0;
return 1 + countNumbers(x * 10, n) +
countNumbers(x * 10 + 1, n);
}
let n = 120;
document.write(countNumbers(1, n));
</script>
|
Time Complexity: O((log10n))
Auxiliary Space: O((log10n))