Preštejte načine za črkovanje števila s ponavljajočimi se števkami
#practiceLinkDiv { display: none !important; } Podan je niz, ki vsebuje števke števila. Številka lahko vsebuje veliko enakih neprekinjenih števk. Naloga je prešteti število načinov črkovanja števila.
Na primer, razmislite o 8884441100, ki ga lahko napišete preprosto kot trojna osem trojna štiri dvojna dva in dvojna ničla. Črkuje se lahko tudi kot dvojna osem osem štiri dvojna štiri dva dva dvojna ničla.
Primeri:
Input : num = 100 Output : 2 The number 100 has only 2 possibilities 1) one zero zero 2) one double zero. Input : num = 11112 Output: 8 1 1 1 1 2 11 1 1 2 1 1 11 2 1 11 1 2 11 11 2 1 111 2 111 1 2 1111 2 Input : num = 8884441100 Output: 64 Input : num = 12345 Output: 1 Input : num = 11111 Output: 16Recommended Practice Črkuj številko Poskusite!
To je preprost problem permutacije in kombinacije. Če vzamemo primer testnega primera, podanega v vprašanju 11112. Odgovor je odvisen od števila možnih podnizov 1111. Število možnih podnizov '1111' je 2^3 = 8, ker je to število kombinacij 4 - 1 = 3 ločil '|' med dvema znakoma niza (števke števila, ki jih predstavlja niz): '1|1|1|1'. Ker bodo naše kombinacije odvisne od tega, ali bomo izbrali določeno 1 in bo za '2' obstajala le ena možnost 2^0 = 1, bo odgovor za '11112' 8*1 = 8.
Pristop je torej prešteti določeno neprekinjeno števko v nizu in pomnožiti 2^(štetje-1) s prejšnjim rezultatom.
C++ // C++ program to count number of ways we // can spell a number #include using namespace std ; typedef long long int ll ; // Function to calculate all possible spells of // a number with repeated digits // num --> string which is favourite number ll spellsCount ( string num ) { int n = num . length (); // final count of total possible spells ll result = 1 ; // iterate through complete number for ( int i = 0 ; i < n ; i ++ ) { // count contiguous frequency of particular // digit num[i] int count = 1 ; while ( i < n -1 && num [ i + 1 ] == num [ i ]) { count ++ ; i ++ ; } // Compute 2^(count-1) and multiply with result result = result * pow ( 2 count -1 ); } return result ; } // Driver program to run the case int main () { string num = '11112' ; cout < < spellsCount ( num ); return 0 ; }
Java // Java program to count number of ways we // can spell a number import java.io.* ; class GFG { // Function to calculate all possible // spells of a number with repeated digits // num --> string which is favourite number static long spellsCount ( String num ) { int n = num . length (); // final count of total possible spells long result = 1 ; // iterate through complete number for ( int i = 0 ; i < n ; i ++ ) { // count contiguous frequency of // particular digit num[i] int count = 1 ; while ( i < n - 1 && num . charAt ( i + 1 ) == num . charAt ( i )) { count ++ ; i ++ ; } // Compute 2^(count-1) and multiply // with result result = result * ( long ) Math . pow ( 2 count - 1 ); } return result ; } public static void main ( String [] args ) { String num = '11112' ; System . out . print ( spellsCount ( num )); } } // This code is contributed by Anant Agarwal.
Python3 # Python3 program to count number of # ways we can spell a number # Function to calculate all possible # spells of a number with repeated # digits num --> string which is # favourite number def spellsCount ( num ): n = len ( num ); # final count of total # possible spells result = 1 ; # iterate through complete # number i = 0 ; while ( i < n ): # count contiguous frequency # of particular digit num[i] count = 1 ; while ( i < n - 1 and num [ i + 1 ] == num [ i ]): count += 1 ; i += 1 ; # Compute 2^(count-1) and # multiply with result result = result * int ( pow ( 2 count - 1 )); i += 1 ; return result ; # Driver Code num = '11112' ; print ( spellsCount ( num )); # This code is contributed # by mits
C# // C# program to count number of ways we // can spell a number using System ; class GFG { // Function to calculate all possible // spells of a number with repeated // digits num --> string which is // favourite number static long spellsCount ( String num ) { int n = num . Length ; // final count of total possible // spells long result = 1 ; // iterate through complete number for ( int i = 0 ; i < n ; i ++ ) { // count contiguous frequency of // particular digit num[i] int count = 1 ; while ( i < n - 1 && num [ i + 1 ] == num [ i ]) { count ++ ; i ++ ; } // Compute 2^(count-1) and multiply // with result result = result * ( long ) Math . Pow ( 2 count - 1 ); } return result ; } // Driver code public static void Main () { String num = '11112' ; Console . Write ( spellsCount ( num )); } } // This code is contributed by nitin mittal.
PHP // PHP program to count // number of ways we // can spell a number // Function to calculate // all possible spells of // a number with repeated // digits num --> string // which is favourite number function spellsCount ( $num ) { $n = strlen ( $num ); // final count of total // possible spells $result = 1 ; // iterate through // complete number for ( $i = 0 ; $i < $n ; $i ++ ) { // count contiguous frequency // of particular digit num[i] $count = 1 ; while ( $i < $n - 1 && $num [ $i + 1 ] == $num [ $i ]) { $count ++ ; $i ++ ; } // Compute 2^(count-1) and // multiply with result $result = $result * pow ( 2 $count - 1 ); } return $result ; } // Driver Code $num = '11112' ; echo spellsCount ( $num ); // This code is contributed // by nitin mittal. ?>
JavaScript < script > // Javascript program to count number of // ways we can spell a number // Function to calculate all possible // spells of a number with repeated // digits num --> string which is // favourite number function spellsCount ( num ) { let n = num . length ; // Final count of total possible // spells let result = 1 ; // Iterate through complete number for ( let i = 0 ; i < n ; i ++ ) { // Count contiguous frequency of // particular digit num[i] let count = 1 ; while ( i < n - 1 && num [ i + 1 ] == num [ i ]) { count ++ ; i ++ ; } // Compute 2^(count-1) and multiply // with result result = result * Math . pow ( 2 count - 1 ); } return result ; } // Driver code let num = '11112' ; document . write ( spellsCount ( num )); // This code is contributed by code_hunt < /script>
Izhod
8
Časovna zapletenost: O(n*log(n))
Pomožni prostor: O(1)
Če imate drugačen pristop k rešitvi tega problema, ga delite.