ද්විමය ලීට්කෝඩ් විසඳුම එක් කරන්න


දුෂ්කරතා මට්ටම පහසු
නිතර අසනු ලැබේ ඇමේසන් ෆේස්බුක් මයික්රොසොෆ්ට්
ගණිතය String

ගැටළු ප්රකාශය

ද්විමය දෙකක් ලබා දී ඇත නූල් a සහ b, අපට මෙම නූල් දෙක එකතු කර ප්‍රති result ලය ද්විමය නූලක් ලෙස ලබා දිය යුතුය. ද්විමය නූල් යනු 0s සහ 1s පමණක් අඩංගු නූල් වේ.

උදාහරණයක්

a = "11", b = "1"
"100"
a = "1010", b = "1011"
"10101"

ප්රවේශය

ද්විමය ලීට්කෝඩ් විසඳුම එක් කරන්න

ද්විමය නූල් දෙකක් එකතු කිරීම සඳහා අපි එකතු කිරීම් ටිකෙන් ටික සිදු කළ යුතුය. අප දන්නා පරිදි එකතු කිරීම දකුණු කෙළවරේ සිට වම් බිටු දෙසට ගමන් කරයි. එබැවින් අපට දී ඇති නූල් ආපසු හරවා යැවිය යුතු අතර ඉන් පසුව එහි බිටු එකතු කිරීම දර්ශක 0 සිට ආරම්භ කළ හැකිය.
බිට් එකතු කිරීමේ අනුක්‍රමය ගබඩා කිරීම සඳහා අපට නූල් විචල්‍යයක් නිර්මාණය කළ හැකිය res බිටු දෙකක එකතුව එකතු කර අවසානයේ ගෙන යන්න res එක් එක් බිට් පිහිටීම සඳහා නූල්. අවසාන වශයෙන් අපි එය නැවත ලබා දෙන්නෙමු res ප්‍රතිදානය සඳහා වන නූල.

ඇල්ගොරිතම

  • දී ඇති නූල් ආපසු හරවන්න.
  • හිස් නූලක් සහ අ ගෙනියන්න විචල්ය. ආරම්භ කරන්න ගෙනියන්න 0 ක් සමඟ.
  • දැන් දී ඇති නූල් ටික වේලාවකින් නැවත කරකවන්න, පළමු හා දෙවන නූල් ටිකක් රැගෙන යන්න. දැන් එකතු කිරීමේ අගය අනුව ප්‍රති result ල බිට් රෙස් ස්ට්‍රිං වෙත එකතු කර යාවත්කාලීන කරන්න ගෙනියන්න ඊළඟ බිට් සඳහා.
  • අන්තිමේදී අපට ප්‍රතිදාන නූලක් ඇති නමුත් එය ප්‍රතිලෝම අනුපිළිවෙලට ඇත්තේ අපගේ පහසුව සඳහා ප්‍රතිලෝම ආදාන නූල් එකතු කිරීමක් සිදු කර ඇති බැවිනි. එම නිසා ප්‍රතිදාන නූල ආපසු හරවා අවසානයේ එය ආපසු දෙන්න.

ක්රියාත්මක කිරීම

ද්විමය ලීට්කෝඩ් විසඳුම එකතු කිරීම සඳහා සී ++ වැඩසටහන

#include <bits/stdc++.h>
using namespace std;

string addBinary(string a, string b) 
{      
    int carry=0;
    string res="";

    reverse(a.begin(),a.end()); 
    reverse(b.begin(),b.end());

    int i=0,sum;
    while(i<a.size() || i<b.size())
    {
        sum= carry;

        if(i<a.size()) sum+= a[i]-'0';
        if(i<b.size()) sum+= b[i]-'0';

        if(sum==0) carry=0, res+='0';
        else if(sum==1)  carry=0, res+='1';
        else if(sum==2)carry=1, res+='0';
        else carry=1, res+='1';


        i++;
    }


    if(carry==1)  res+='1';

    reverse(res.begin(),res.end());
    return res;
        
}
int main()
{
  string a = "1010"; 
  string b = "1011";
  cout<<addBinary(a,b)<<endl;
}
10101

ද්විමය ලීට්කෝඩ් විසඳුම එකතු කිරීම සඳහා ජාවා වැඩසටහන

import java.util.*;

class Rextester{
    
    public static String addBinary(String a, String b) 
    {      
        int carry=0;

        StringBuilder s1=new StringBuilder(a);
        StringBuilder s2=new StringBuilder(b);
        StringBuilder res=new StringBuilder();

        s1.reverse(); 
        s2.reverse();

        int i=0,sum;
        while(i<a.length() || i<b.length())
        {
            sum= carry;

            if(i<a.length()) sum+= s1.charAt(i)-'0';
            if(i<b.length()) sum+= s2.charAt(i)-'0';

            if(sum==0) 
            {
                 carry=0;
                 res.append('0');
            }
            if(sum==1) 
            {
                 carry=0;
                 res.append('1');
             }
            if(sum==2)
            {
                carry=1;
                res.append('0');
            }
           if(sum==3) 
            {
                carry=1;
                res.append('1');
            }

            i++;
        }
    
        if(carry==1)   res.append('1');

        res.reverse();
        return res.toString();
        
    }
    
  public static void main(String args[])
    {
        String a = "1010"; 
        String b = "1011";
        System.out.println(addBinary(a,b));
    }
}
10101

ද්විමය ලීට්කෝඩ් විසඳුම එකතු කිරීම සඳහා සංකීර්ණතා විශ්ලේෂණය

කාල සංකීර්ණත්වය

O (උපරිම (N, M)): N සහ M යනු ආදාන නූල් වල දිග වේ. අපි නූල් දෙකම රේඛීයව තනි පුඩුවක් හරහා ගමන් කරන බැවින්, කාල සංකීර්ණත්වය ආදාන නූල් දෙකෙන් උපරිම දිගට සමාන වේ.

අභ්‍යවකාශ සංකීර්ණතාව 

O (උපරිම (N, M)): එකතු කිරීමෙන් පසු ප්‍රති result ලය නූලක ගබඩා කිරීම සඳහා අපට ආදාන නූල්වල දිගට සමාන වන විශාල ප්‍රමාණයක් අවශ්‍ය වේ.