Given two integers n and m where n is the number of 0s and m is the number of 1s. The task is to print all the 0s and 1s in a single row such that no two 0s are together and no three 1s are together. If it’s not possible to arrange 0s and 1s according to the condition then print -1.
Examples:
Input: n = 1, m = 2
Output: 011
Input: n = 4, m = 8
Output: 110110110101
Approach: We have answers only when, ( (n – 1) ? m and m ? 2 * (n + 1).
- If (m == n – 1) then print the pattern 010101… starting from 0 until all the 0s and 1s have been used.
- If (m > n) and m ? 2 * (n + 1) then print the pattern 110110110… until there is excessive 1s and change to pattern 0101010… when m becomes equal to n – 1.
Below is the implementation of the above approach:
C++
// C++ implementation of the approach #include <bits/stdc++.h> using namespace std; // Function to print the required pattern void printPattern( int n, int m) { // When condition fails if (m > 2 * (n + 1) || m < n - 1) { cout << "-1" ; } // When m = n - 1 else if ( abs (n - m) <= 1) { while (n > 0 && m > 0) { cout << "01" ; n--; m--; } if (n != 0) { cout << "0" ; } if (m != 0) { cout << "1" ; } } else { while (m - n > 1 && n > 0) { cout << "110" ; m = m - 2; n = n - 1; } while (n > 0) { cout << "10" ; n--; m--; } while (m > 0) { cout << "1" ; m--; } } } // Driver program int main() { int n = 4, m = 8; printPattern(n, m); return 0; } |
Java
// Java implementation of the above approach class GFG { // Function to print the required pattern static void printPattern( int n, int m) { // When condition fails if (m > 2 * (n + 1 ) || m < n - 1 ) { System.out.print( "-1" ); } // When m = n - 1 else if (Math.abs(n - m) <= 1 ) { while (n > 0 && m > 0 ) { System.out.print( "01" ); n--; m--; } if (n != 0 ) { System.out.print( "0" ); } if (m != 0 ) { System.out.print( "1" ); } } else { while (m - n > 1 && n > 0 ) { System.out.print( "110" ); m = m - 2 ; n = n - 1 ; } while (n > 0 ) { System.out.print( "10" ); n--; m--; } while (m > 0 ) { System.out.print( "1" ); m--; } } } // Driver code public static void main(String []args) { int n = 4 , m = 8 ; printPattern(n, m); } } // This code is contributed by Ita_c. |
Python3
# Python 3 implementation of the approach # Function to print the required pattern def printPattern(n, m): # When condition fails if (m > 2 * (n + 1 ) or m < n - 1 ): print ( "-1" , end = "") # When m = n - 1 elif ( abs (n - m) < = 1 ): while (n > 0 and m > 0 ): print ( "01" , end = ""); n - = 1 m - = 1 if (n ! = 0 ): print ( "0" , end = "") if (m ! = 0 ): print ( "1" , end = "") else : while (m - n > 1 and n > 0 ): print ( "110" , end = "") m = m - 2 n = n - 1 while (n > 0 ): print ( "10" , end = "") n - = 1 m - = 1 while (m > 0 ): print ( "1" , end = "") m - = 1 # Driver Code if __name__ = = '__main__' : n = 4 m = 8 printPattern(n, m) # This code is contributed by # Surendra_Gangwar |
C#
// C# implementation of the above approach using System; class GFG { // Function to print the required pattern static void printPattern( int n, int m) { // When condition fails if (m > 2 * (n + 1) || m < n - 1) { Console.Write( "-1" ); } // When m = n - 1 else if (Math.Abs(n - m) <= 1) { while (n > 0 && m > 0) { Console.Write( "01" ); n--; m--; } if (n != 0) { Console.Write( "0" ); } if (m != 0) { Console.Write( "1" ); } } else { while (m - n > 1 && n > 0) { Console.Write( "110" ); m = m - 2; n = n - 1; } while (n > 0) { Console.Write( "10" ); n--; m--; } while (m > 0) { Console.Write( "1" ); m--; } } } // Driver code public static void Main() { int n = 4, m = 8; printPattern(n, m); } } // This code is contributed by Ryuga |
PHP
<?php // PHP implementation of the above approach // Function to print the required pattern function printPattern( $n , $m ) { // When condition fails if ( $m > 2 * ( $n + 1) || $m < $n - 1) { echo ( "-1" ); } // When m = n - 1 else if ( abs ( $n - $m ) <= 1) { while ( $n > 0 && $m > 0) { System.out. print ( "01" ); $n --; $m --; } if ( $n != 0) { echo ( "0" ); } if ( $m != 0) { echo ( "1" ); } } else { while ( $m - $n > 1 && $n > 0) { echo ( "110" ); $m = $m - 2; $n = $n - 1; } while ( $n > 0) { echo ( "10" ); $n --; $m --; } while ( $m > 0) { echo ( "1" ); $m --; } } } // Driver code $n = 4; $m = 8; printPattern( $n , $m ); // This code is contributed by // Mukul Singh. ?> |
Javascript
<script> // JavaScript implementation of the above approach // Function to print the required pattern function printPattern( n, m) { // When condition fails if (m > 2 * (n + 1) || m < n - 1) { document.write( "-1" ); } // When m = n - 1 else if (Math.abs(n - m) <= 1) { while (n > 0 && m > 0) { document.write( "01" ); n--; m--; } if (n != 0) { document.write( "0" ); } if (m != 0) { document.write( "1" ); } } else { while (m - n > 1 && n > 0) { document.write( "110" ); m = m - 2; n = n - 1; } while (n > 0) { document.write( "10" ); n--; m--; } while (m > 0) { document.write( "1" ); m--; } } } var n = 4, m = 8; printPattern(n, m); </script> |
110110110101
Time complexity : O(m)
Space complexity : O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!