Legg til elementer av gitte matriser med gitte begrensninger

Gitt to heltallsmatriser legg til elementene deres i tredje matrise ved å tilfredsstille følgende begrensninger - 

  1. Addisjon bør gjøres fra 0. indeks for begge arrays. 
  2. Del opp summen hvis det ikke er et enkeltsifret tall og lagre sifrene på tilstøtende steder i utdatamatrisen. 
  3. Utdatamatrisen skal romme eventuelle gjenværende sifre i større innmatningsmatrise.

Eksempler:  

  Input:    a = [9 2 3 7 9 6] b = [3 1 4 7 8 7 6 9]   Output:    [1 2 3 7 1 4 1 7 1 3 6 9]   Input:    a = [9343 2 3 7 9 6] b = [34 11 4 7 8 7 6 99]   Output:    [9 3 7 7 1 3 7 1 4 1 7 1 3 6 9 9]   Input:    a = [] b = [11 2 3 ]   Output:    [1 1 2 3 ]   Input:    a = [9 8 7 6 5 4 3 2 1] b = [1 2 3 4 5 6 7 8 9]   Output:    [1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0] 

Vanskelighetsgrad: Nybegynner

Ideen er veldig enkel. Vi opprettholder en utdatamatrise og kjører en løkke fra den 0. indeksen til begge matrisene. For hver iterasjon av løkken vurderer vi neste elementer i begge arrayene og legger dem til. Hvis summen er større enn 9, skyver vi de individuelle sifrene i summen til utdatamatrisen, ellers skyver vi selve summen. Til slutt skyver vi de gjenværende elementene i større input-array til output-array.

Nedenfor er implementeringen av ideen ovenfor: 

C++
   // C++ program to add two arrays following given   // constraints   #include       using     namespace     std  ;   // Function to push individual digits of a number   // to output vector from left to right   void     split  (  int     num       vector   <  int  >     &  out  )   {      vector   <  int  >     arr  ;      while     (  num  )      {      arr  .  push_back  (  num  %  10  );      num     =     num  /  10  ;      }      // reverse the vector arr and append it to output vector      out  .  insert  (  out  .  end  ()     arr  .  rbegin  ()     arr  .  rend  ());   }   // Function to add two arrays keeping given   // constraints   void     addArrays  (  int     arr1  []     int     arr2  []     int     m       int     n  )   {      // create a vector to store output      vector   <  int  >     out  ;      // maintain a variable to store current index in      // both arrays      int     i     =     0  ;      // loop till arr1 or arr2 runs out      while     (  i      <     m     &&     i      <     n  )      {      // read next elements from both arrays and      // add them      int     sum     =     arr1  [  i  ]     +     arr2  [  i  ];      // if sum is single digit number      if     (  sum      <     10  )      out  .  push_back  (  sum  );      else      {      // if sum is not a single digit number push      // individual digits to output vector      split  (  sum       out  );      }      // increment to next index      i  ++  ;      }      // push remaining elements of first input array      // (if any) to output vector      while     (  i      <     m  )      split  (  arr1  [  i  ++  ]     out  );      // push remaining elements of second input array      // (if any) to output vector      while     (  i      <     n  )      split  (  arr2  [  i  ++  ]     out  );      // print the output vector      for     (  int     x     :     out  )      cout      < <     x      < <     ' '  ;   }   // Driver code   int     main  ()   {      int     arr1  []     =     {  9343       2       3       7       9       6  };      int     arr2  []     =     {  34       11       4       7       8       7       6       99  };      int     m     =     sizeof  (  arr1  )     /     sizeof  (  arr1  [  0  ]);      int     n     =     sizeof  (  arr2  )     /     sizeof  (  arr2  [  0  ]);      addArrays  (  arr1       arr2       m       n  );      return     0  ;   }   
Java
   // Java program to add two arrays following given    // constraints    import     java.util.Vector  ;   class   GFG   {      // Function to push individual digits of a number      // to output vector from left to right      static     void     split  (  int     num       Vector   <  Integer  >     out  )         {      Vector   <  Integer  >     arr     =     new     Vector   <>  ();      while     (  num     >     0  )      {      arr  .  add  (  num     %     10  );      num     /=     10  ;      }      // reverse the vector arr and      // append it to output vector      for     (  int     i     =     arr  .  size  ()     -     1  ;     i     >=     0  ;     i  --  )      out  .  add  (  arr  .  elementAt  (  i  ));      }      // Function to add two arrays keeping given      // constraints      static     void     addArrays  (  int  []     arr1       int  []     arr2        int     m       int     n  )         {      // create a vector to store output      Vector   <  Integer  >     out     =     new     Vector   <>  ();      // maintain a variable to store      // current index in both arrays      int     i     =     0  ;      // loop till arr1 or arr2 runs out      while     (  i      <     m     &&     i      <     n  )         {      // read next elements from both arrays       // and add them      int     sum     =     arr1  [  i  ]     +     arr2  [  i  ]  ;      // if sum is single digit number      if     (  sum      <     10  )      out  .  add  (  sum  );      else      // if sum is not a single digit number       // push individual digits to output vector      split  (  sum       out  );      // increment to next index      i  ++  ;      }      // push remaining elements of first input array      // (if any) to output vector      while     (  i      <     m  )      split  (  arr1  [  i  ++]       out  );      // push remaining elements of second input array      // (if any) to output vector      while     (  i      <     n  )      split  (  arr2  [  i  ++]       out  );      // print the output vector      for     (  int     x     :     out  )      System  .  out  .  print  (  x     +     ' '  );      }      // Driver Code      public     static     void     main  (  String  []     args  )         {      int  []     arr1     =     {     9343       2       3       7       9       6     };      int  []     arr2     =     {     34       11       4       7       8       7       6       99     };      int     m     =     arr1  .  length  ;      int     n     =     arr2  .  length  ;      addArrays  (  arr1       arr2       m       n  );      }   }   // This code is contributed by   // sanjeev2552   
Python3
   # Python program to add two arrays   # following given constraints   # Function to push individual digits    # of a number to output list from   # left to right   def   split  (  num     out  ):   arr   =   []   while   num  :   arr  .  append  (  num   %   10  )   num   =   num   //   10   for   i   in   range  (  len  (  arr  )   -   1     -  1     -  1  ):   out  .  append  (  arr  [  i  ])   # Function to add two arrays keeping given   # constraints   def   add_arrays  (  arr1     arr2     m     n  ):   # Create a list to store output   out   =   []   # Maintain a variable to store    # current index in both arrays   i   =   0   # Loop till arr1 or arr2 runs out   while   i    <   m   and   i    <   n  :   # Read next elements from both    # arrays and add them   sum   =   arr1  [  i  ]   +   arr2  [  i  ]   # If sum is single digit number   if   sum    <   10  :   out  .  append  (  sum  )   else  :   # If sum is not a single digit    # number push individual digits   # to output list   split  (  sum     out  )   # Increment to next index   i   +=   1   # Push remaining elements of first    # input array (if any) to output list   while   i    <   m  :   split  (  arr1  [  i  ]   out  )   i   +=   1   # Push remaining elements of second   # input array (if any) to output list   while   i    <   n  :   split  (  arr2  [  i  ]   out  )   i   +=   1   # Print the output list   for   x   in   out  :   print  (  x     end   =   ' '  )   # Driver code   arr1   =   [  9343     2     3     7     9     6  ]   arr2   =   [  34     11     4     7     8     7     6     99  ]   m   =   len  (  arr1  )   n   =   len  (  arr2  )   add_arrays  (  arr1     arr2     m     n  )   # This code is contributed by akashish__   
C#
   // C# program to add two arrays following given    // constraints    using     System  ;   using     System.Collections.Generic  ;   class     GFG      {         // Function to push individual digits of a number       // to output vector from left to right       static     void     split  (  int     num       List   <  int  >     outs  )         {         List   <  int  >     arr     =     new     List   <  int  >  ();         while     (  num     >     0  )         {         arr  .  Add  (  num     %     10  );         num     /=     10  ;         }         // reverse the vector arr and       // append it to output vector       for     (  int     i     =     arr  .  Count     -     1  ;     i     >=     0  ;     i  --  )         outs  .  Add  (  arr  [  i  ]);         }         // Function to add two arrays keeping given       // constraints       static     void     addArrays  (  int  []     arr1       int  []     arr2           int     m       int     n  )         {         // create a vector to store output       List   <  int  >     outs     =     new     List   <  int  >  ();         // maintain a variable to store       // current index in both arrays       int     i     =     0  ;         // loop till arr1 or arr2 runs out       while     (  i      <     m     &&     i      <     n  )         {         // read next elements from both arrays       // and add them       int     sum     =     arr1  [  i  ]     +     arr2  [  i  ];         // if sum is single digit number       if     (  sum      <     10  )         outs  .  Add  (  sum  );         else      // if sum is not a single digit number       // push individual digits to output vector       split  (  sum       outs  );         // increment to next index       i  ++  ;         }         // push remaining elements of first input array       // (if any) to output vector       while     (  i      <     m  )         split  (  arr1  [  i  ++  ]     outs  );         // push remaining elements of second input array       // (if any) to output vector       while     (  i      <     n  )         split  (  arr2  [  i  ++  ]     outs  );         // print the output vector       foreach     (  int     x     in     outs  )         Console  .  Write  (  x     +     ' '  );         }         // Driver Code       public     static     void     Main  (  String  []     args  )         {         int  []     arr1     =     {     9343       2       3       7       9       6     };         int  []     arr2     =     {     34       11       4       7       8       7       6       99     };         int     m     =     arr1  .  Length  ;         int     n     =     arr2  .  Length  ;         addArrays  (  arr1       arr2       m       n  );         }      }      // This code is contributed by PrinciRaj1992   
JavaScript
    <  script  >   // Javascript program to add two arrays   // following given constraints   // Function to push individual digits    // of a number to output vector from   // left to right   function     split  (  num       out  )   {      let     arr     =     [];      while     (  num  )         {      arr  .  push  (  num     %     10  );      num     =     Math  .  floor  (  num     /     10  );      }      for  (  let     i     =     arr  .  length     -     1  ;     i     >=     0  ;     i  --  )      out  .  push  (  arr  [  i  ]);   }   // Function to add two arrays keeping given   // constraints   function     addArrays  (  arr1       arr2       m       n  )      {          // Create a vector to store output      let     out     =     [];      // Maintain a variable to store       // current index in both arrays      let     i     =     0  ;      // Loop till arr1 or arr2 runs out      while     (  i      <     m     &&     i      <     n  )      {          // Read next elements from both       // arrays and add them      let     sum     =     arr1  [  i  ]     +     arr2  [  i  ];      // If sum is single digit number      if     (  sum      <     10  )      out  .  push  (  sum  );      else         {          // If sum is not a single digit       // number push individual digits      // to output vector      split  (  sum       out  );      }      // Increment to next index      i  ++  ;      }          // Push remaining elements of first       // input array (if any) to output vector      while     (  i      <     m  )      split  (  arr1  [  i  ++  ]     out  );      // Push remaining elements of second      // input array (if any) to output vector      while     (  i      <     n  )      split  (  arr2  [  i  ++  ]     out  );      // Print the output vector      for  (  let     x     of     out  )      document  .  write  (  x     +     ' '  );   }   // Driver code   let     arr1     =     [     9343       2       3       7       9       6     ];   let     arr2     =     [     34       11       4       7       8       7       6       99     ];   let     m     =     arr1  .  length  ;   let     n     =     arr2  .  length  ;   addArrays  (  arr1       arr2       m       n  );   // This code is contributed by _saurabh_jaiswal    <  /script>   

Produksjon
9 3 7 7 1 3 7 1 4 1 7 1 3 6 9 9  


Tidskompleksitet av løsningen ovenfor er O(m + n) når vi krysser begge matrisene nøyaktig én gang.

Metode 2 (ved bruk av streng og STL):

i denne tilnærmingen tar vi en streng kalt 'ans'. Når vi legger til elementet i begge arrayene, vil den resulterende summen bli konvertert til streng og denne strengen vil bli tilføyd hovedstrengen 'ans'.

Etter å ha gjort dette for alle elementene vil vi ta en vektor og overføre hele strengen til den vektoren og til slutt skrive ut den vektoren.

Nedenfor er implementeringen av tilnærmingen ovenfor:

C++
   // C++ program to add two arrays   // following given constrains   #include          using     namespace     std  ;   // function to add two arrays   // following given constrains   void     creat_new  (  int     arr1  []     int     arr2  []     int     n       int     m  )   {      string     ans  ;      int     i     =     0  ;      while     (  i      <     min  (  n       m  ))     {      // adding the elements      int     sum     =     arr1  [  i  ]     +     arr2  [  i  ];      // converting the integer to string      string     s     =     to_string  (  sum  );      // appending the string      ans     +=     s  ;      i  ++  ;      }      // entering remaining element(if any) of      // first array      for     (  int     j     =     i  ;     j      <     n  ;     j  ++  )     {      string     s     =     to_string  (  arr1  [  j  ]);      ans     +=     s  ;      }      // entering remaining element (if any) of      // second array      for     (  int     j     =     i  ;     j      <     m  ;     j  ++  )     {      string     s     =     to_string  (  arr2  [  j  ]);      ans     +=     s  ;      }      // taking vector      vector   <  int  >     k  ;      // assigning the elements of string      // to vector      for     (  int     i     =     0  ;     i      <     ans  .  length  ();     i  ++  )     {      k  .  push_back  (  ans  [  i  ]     -     '0'  );      }      // printing the elements of vector      for     (  int     i     =     0  ;     i      <     k  .  size  ();     i  ++  )     {      cout      < <     k  [  i  ]      < <     ' '  ;      }   }   // driver code   int     main  ()   {      int     arr1  []     =     {     9       2       3       7       9       6     };      int     arr2  []     =     {     3       1       4       7       8       7       6       9     };      int     n     =     sizeof  (  arr1  )     /     sizeof  (  arr1  [  0  ]);      int     m     =     sizeof  (  arr2  )     /     sizeof  (  arr2  [  0  ]);      // function call      creat_new  (  arr1       arr2       n       m  );      return     0  ;   }   // this code is contributed by Machhaliya Muhammad   
Java
   /*package whatever //do not write package name here */   import     java.util.*  ;   class   GFG     {      // function to add two arrays      // following given constrains      static     void     creat_new  (  int     arr1  []       int     arr2  []       int     n        int     m  )      {      String     ans     =     ''  ;      int     i     =     0  ;      while     (  i      <     Math  .  min  (  n       m  ))         {      // adding the elements      int     sum     =     arr1  [  i  ]     +     arr2  [  i  ]  ;      // converting the integer to string      String     s     =     sum     +     ''  ;      // appending the string      ans     +=     s  ;      i  ++  ;      }      // entering remaining element(if any) of      // first array      for     (  int     j     =     i  ;     j      <     n  ;     j  ++  )     {      String     s     =     arr1  [  j  ]     +     ''  ;      ans     +=     s  ;      }      // entering remaining element (if any) of      // second array      for     (  int     j     =     i  ;     j      <     m  ;     j  ++  )     {      String     s     =     arr2  [  j  ]     +     ''  ;      ans     +=     s  ;      }      // taking vector      ArrayList   <  Integer  >     k     =     new     ArrayList   <>  ();      // assigning the elements of string      // to vector      for     (  int     j     =     0  ;     j      <     ans  .  length  ();     j  ++  )     {      k  .  add  (  ans  .  charAt  (  j  )     -     '0'  );      }      // printing the elements of vector      for     (  int     j     =     0  ;     j      <     k  .  size  ();     j  ++  )     {      System  .  out  .  print  (  k  .  get  (  j  )     +     ' '  );      }      }      public     static     void     main  (  String  []     args  )      {      int     arr1  []     =     {     9       2       3       7       9       6     };      int     arr2  []     =     {     3       1       4       7       8       7       6       9     };      int     n     =     arr1  .  length  ;      int     m     =     arr2  .  length  ;      // function call      creat_new  (  arr1       arr2       n       m  );      }   }   // This code is contributed by aadityaburujwale.   
Python3
   import   math   class   GFG   :   # function to add two arrays   # following given constrains   @staticmethod   def   creat_new  (   arr1     arr2     n     m  )   :   ans   =   ''   i   =   0   while   (  i    <   min  (  n    m  ))   :   # adding the elements   sum   =   arr1  [  i  ]   +   arr2  [  i  ]   # converting the integer to string   s   =   str  (  sum  )   +   ''   # appending the string   ans   +=   s   i   +=   1   # entering remaining element(if any) of   # first array   j   =   i   while   (  j    <   n  )   :   s   =   str  (  arr1  [  j  ])   +   ''   ans   +=   s   j   +=   1   # entering remaining element (if any) of   # second array   j   =   i   while   (  j    <   m  )   :   s   =   str  (  arr2  [  j  ])   +   ''   ans   +=   s   j   +=   1   # taking vector   k   =   []   # assigning the elements of string   # to vector   j   =   0   while   (  j    <   len  (  ans  ))   :   k  .  append  (  ord  (  ans  [  j  ])   -   ord  (  '0'  ))   j   +=   1   # printing the elements of vector   j   =   0   while   (  j    <   len  (  k  ))   :   print  (  k  [  j  ]  end  =  ' '  )   j   +=   1   @staticmethod   def   main  (   args  )   :   arr1   =   [  9     2     3     7     9     6  ]   arr2   =   [  3     1     4     7     8     7     6     9  ]   n   =   len  (  arr1  )   m   =   len  (  arr2  )   # function call   GFG  .  creat_new  (  arr1     arr2     n     m  )   if   __name__  ==  '__main__'  :   GFG  .  main  ([])   # This code is contributed by aadityaburujwale.   
C#
   // Include namespace system   using     System  ;   using     System.Collections.Generic  ;   public     class     GFG   {      // function to add two arrays      // following given constrains      public     static     void     creat_new  (  int  []     arr1       int  []     arr2       int     n       int     m  )      {      var     ans     =     ''  ;      var     i     =     0  ;      while     (  i      <     Math  .  Min  (  n    m  ))      {      // adding the elements      var     sum     =     arr1  [  i  ]     +     arr2  [  i  ];      // converting the integer to string      var     s     =     sum  .  ToString  ()     +     ''  ;      // appending the string      ans     +=     s  ;      i  ++  ;      }      // entering remaining element(if any) of      // first array      for     (  int     j     =     i  ;     j      <     n  ;     j  ++  )      {      var     s     =     arr1  [  j  ].  ToString  ()     +     ''  ;      ans     +=     s  ;      }      // entering remaining element (if any) of      // second array      for     (  int     j     =     i  ;     j      <     m  ;     j  ++  )      {      var     s     =     arr2  [  j  ].  ToString  ()     +     ''  ;      ans     +=     s  ;      }      // taking vector      var     k     =     new     List   <  int  >  ();      // assigning the elements of string      // to vector      for     (  int     j     =     0  ;     j      <     ans  .  Length  ;     j  ++  )      {      k  .  Add  ((  int  )(  ans  [  j  ])     -     (  int  )(  '0'  ));      }      // printing the elements of vector      for     (  int     j     =     0  ;     j      <     k  .  Count  ;     j  ++  )      {      Console  .  Write  (  k  [  j  ]     +     ' '  );      }      }      public     static     void     Main  (  String  []     args  )      {      int  []     arr1     =     {  9       2       3       7       9       6  };      int  []     arr2     =     {  3       1       4       7       8       7       6       9  };      var     n     =     arr1  .  Length  ;      var     m     =     arr2  .  Length  ;      // function call      GFG  .  creat_new  (  arr1       arr2       n       m  );      }   }   // This code is contributed by aadityaburujwale.   
JavaScript
   // JavaScript Code   // function to add two arrays   // following given constrains   const     creat_new     =     (  arr1       arr2       n       m  )     =>     {      let     ans     =     ''  ;      let     i     =     0  ;      while     (  i      <     Math  .  min  (  n       m  ))         {          // adding the elements      let     sum     =     arr1  [  i  ]     +     arr2  [  i  ];          // converting the integer to string      let     s     =     sum  .  toString  ();          // appending the string      ans     +=     s  ;      i  ++  ;      }          // entering remaining element(if any) of      // first array      for     (  let     j     =     i  ;     j      <     n  ;     j  ++  )     {      let     s     =     arr1  [  j  ].  toString  ();      ans     +=     s  ;      }          // entering remaining element (if any) of      // second array      for     (  let     j     =     i  ;     j      <     m  ;     j  ++  )     {      let     s     =     arr2  [  j  ].  toString  ();      ans     +=     s  ;      }          // taking vector      let     k     =     [];          // assigning the elements of string      // to vector      for     (  let     i     =     0  ;     i      <     ans  .  length  ;     i  ++  )     {      k  .  push  (  parseInt  (  ans  [  i  ]));      }          // printing the elements of vector      console  .  log  (  k  );   }   // Driver code   let     arr1     =     [  9       2       3       7       9       6  ];   let     arr2     =     [  3       1       4       7       8       7       6       9  ];   let     n     =     arr1  .  length  ;   let     m     =     arr2  .  length  ;   // function call   creat_new  (  arr1       arr2       n       m  );   // This code is contributed by akashish__   

Produksjon
1 2 3 7 1 4 1 7 1 3 6 9  

Tidskompleksitet: O(maks(mn))

Auxiliary Space:O(m+n) siden vektor k (av størrelse m+n i verste fall) blir opprettet.