模擬題---Leetcode67---二進制求和

題目

  給你兩個二進制字符串,返回它們的和(用二進制表示)。輸入爲 非空 字符串且只包含數字 1 和 0。

示例 1:
輸入: a = “11”, b = “1”
輸出: “100”

示例 2:
輸入: a = “1010”, b = “1011”
輸出: “10101”

語言:C++
外部依賴:單元測試庫-gtest
規範:需要自己寫單元測試類,來進行提交前的測試,減少重複工作,並且對非法輸入進行過濾

詳解:
  邏輯就是從字符串的最後一位開始遍歷,將兩個字符串取出來的字符以及上一個進位進行相加,獲得下一個進位以及當前下標的數據。如果此時的下標超過了其中一個字符串的長度,那就設當前字符串下標上的取得的數據爲0,當下標超過兩個字符串的最長位數,停止循環。

#include<iostream>
#include<stack>
#include<algorithm>
#include<queue>
#include<set>
#include<map>
using namespace std;


namespace slution{
    //輸入爲 非空 字符串且只包含數字 1 和 0
    class Solution {
    public:
        string addBinary(string a, string b) {
            //miniLen代表兩個字符串中最短的長度 採用駝峯命名法
            //相加無非三種情況 0+0=0 1+0=1 1+1=0 進一位
            int cnt = 1;
            int c = 0;
            int aLen = a.size();
            int bLen = b.size();
            int tmpA,tmpB;
            string result = "";
            //當遍歷的長度沒有達到長字符串的長度時候 繼續遍歷
            while(cnt<=aLen||cnt<=bLen){
                //取當前字符串的字符
                if(cnt<=aLen){
                    tmpA = a[aLen-cnt] - '0';
                }else{
                    tmpA = 0;
                }
                if(cnt<=bLen){
                    tmpB = b[bLen-cnt] - '0';
                }else{
                    tmpB = 0;
                }
                char tmp = (tmpA+tmpB+c)%2 + '0';
                c = (tmpA+tmpB+c)/2;
                result = tmp+result;
                cnt++;
            }
            //如果最後的進位是1 那麼在字符串前後添加1
            if(c==1)
                result = "1" + result;
            return result;
        }
    };
}
#include<cstdio>
#include<gtest/gtest.h>
#include "solution.h"
using namespace slution;

//單元測試
Solution slu;

TEST(slutiontest, HandleNormalInput)
{

    string input1 = "110";
    string input2 = "1";
    string output1 = "111";
    EXPECT_EQ(output1, slu.addBinary(input1,input2));

    input1 = "11";
    input2 = "1";
    output1 = "100";
    EXPECT_EQ(output1, slu.addBinary(input1,input2));

    input1 = "1010";
    input2 = "1011";
    output1 = "10101";
    EXPECT_EQ(output1, slu.addBinary(input1,input2));

}

TEST(slutiontest, HandleExtremeInput)
{
    string input1 = "0";
    string input2 = "0";
    string output1 = "0";
    EXPECT_EQ(output1, slu.addBinary(input1,input2));
}

int main(int argc, char *argv[])
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
    return 0;
}

結果

執行結果:
通過
顯示詳情
執行用時:0 ms, 在所有 C++ 提交中擊敗了100.00%的用戶
內存消耗:7.1 MB, 在所有 C++ 提交中擊敗了100.00%的用戶

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章