Count numbers having N 0’s and and M 1’s with no leading zeros

Given two integer N and M, the task is to find the number of distinct numbers having N 0’s and M 1’s with no leading zeros and N + M total digits.

Examples:

Input: N = 2, M = 2
Output: 3
The numbers are 1001, 1010 and 1100.



Input: N = 2, M = 3
Output: 6
The numbers are 10011, 10101, 10110, 11001, 11010 and 11100.

Approach: The problem can be easily solved by finding the total permutation of N similar items and M – 1 similar items. Since no leading zeros are allowed, one 1 is always fixed at the start of the number. The remaining M – 1 1’s and N 0’s are arranged in different permutations. Now, the number of permutations of (A + B) objects where A objects of same type and B objects of other type is given by (A + B)! / (A! * B!). Therefore, the number of distinct numbers is given by (N + M -1)! / (N! * (M – 1)!).

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
#define ll long long int
  
// Function to return the factorial of a number
ll factorial(int f)
{
    ll fact = 1;
  
    for (int i = 2; i <= f; i++)
        fact *= (ll)i;
  
    return fact;
}
  
// Function to return the count of distinct
// (N + M) digit numbers having N 0's
// and and M 1's with no leading zeros
ll findPermutation(int N, int M)
{
    ll permutation = factorial(N + M - 1)
                     / (factorial(N) * factorial(M - 1));
    return permutation;
}
  
// Driver code
int main()
{
    int N = 3, M = 3;
    cout << findPermutation(N, M);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach
import java.io.*;
  
class GFG
{
// Function to return the factorial of a number
static int factorial(int f)
{
    int fact = 1;
  
    for (int i = 2; i <= f; i++)
        fact *= (int)i;
  
    return fact;
}
  
// Function to return the count of distinct
// (N + M) digit numbers having N 0's
// and and M 1's with no leading zeros
static int findPermutation(int N, int M)
{
    int permutation = factorial(N + M - 1)
                    / (factorial(N) * factorial(M - 1));
    return permutation;
}
  
// Driver code
public static void main (String[] args)
{
  
    int N = 3, M = 3;
    System.out.println(findPermutation(N, M));
}
}
  
// This code is contributed
// by ajit

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach
  
# Function to return the factorial
# of a number
def factorial(f):
    fact = 1
    for i in range(2, f + 1):
        fact *= i
    return fact
  
# Function to return the count of distinct
# (N + M) digit numbers having N 0's
# and and M 1's with no leading zeros
def findPermuatation(N, M):
    permutation = (factorial(N + M - 1) // 
                  (factorial(N) * factorial(M - 1)))
    return permutation
  
# Driver code
N = 3; M = 3
print(findPermuatation(N, M))
  
# This code is contributed 
# by Shrikant13

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach
using System;
  
class GFG
{
// Function to return the factorial of a number
static int factorial(int f)
{
    int fact = 1;
  
    for (int i = 2; i <= f; i++)
        fact *= (int)i;
  
    return fact;
}
  
// Function to return the count of distinct
// (N + M) digit numbers having N 0's
// and and M 1's with no leading zeros
static int findPermutation(int N, int M)
{
    int permutation = factorial(N + M - 1)
                    / (factorial(N) * factorial(M - 1));
    return permutation;
}
  
// Driver code
public static void Main()
{
    int N = 3, M = 3;
    Console.Write(findPermutation(N, M));
}
}
  
// This code is contributed
// by Akanksha Rai

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
  
// PHP implementation of the approach
// Function to return the factorial of a number
function factorial($f)
{
    $fact = 1;
  
    for ($i = 2; $i <= $f; $i++)
        $fact *= $i;
  
    return $fact;
}
  
// Function to return the count of distinct
// (N + M) digit numbers having N 0's
// and and M 1's with no leading zeros
function findPermutation($N,$M)
{
    $permutation = factorial($N + $M - 1)
                    / (factorial($N) * factorial($M - 1));
    return $permutation;
}
  
    // Driver code
    $N = 3;
    $M = 3;
    echo findPermutation($N, $M);
      
// This code is contributed by ajit.. 
?>

chevron_right


Output:

10


My Personal Notes arrow_drop_up

Coder Machine Learner Social Activist Vocalist

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.