zoukankan      html  css  js  c++  java
  • 【LeetCode】66 & 67- Plus One & Add Binary

    66 - Plus One

    Given a non-negative number represented as an array of digits, plus one to the number.

    The digits are stored such that the most significant digit is at the head of the list.

    Solution 1 : 十进制加法

     1 class Solution {
     2 public:
     3     vector<int> plusOne(vector<int> &digits) {
     4         int carry = 1;
     5         for(int i = digits.size()-1; i >= 0; i --)
     6         {
     7             int sum = digits[i]+carry;
     8             carry = sum / 10;
     9             digits[i] = sum % 10;
    10             if(carry == 0)
    11                 break;
    12         }
    13         if(carry == 1)
    14             digits.insert(digits.begin(), 1);
    15         return digits;
    16     }
    17 };

    Solution 2 :

     1 class Solution {
     2 public:
     3     vector<int> plusOne(vector<int> &digits) {
     4         for(int i = digits.size()-1; i >= 0; i --)
     5         {
     6             if(digits[i] <= 8){
     7                 digits[i] += 1;
     8                 return digits;
     9             }else{//9
    10                 if(i != 0)
    11                     digits[i] = 0;
    12                 else
    13                 {
    14                     digits[0] = 1;
    15                     digits.push_back(0);
    16                     return digits;
    17                 }
    18             }
    19         }
    20     }
    21 };

    67- Add Binary

    Given two binary strings, return their sum (also a binary string).

    For example,
    a = "11"
    b = "1"
    Return "100".

    Solution:二进制加法,和为2进1,和为3进1留1;

    复制代码
     1 class Solution {
     2 public:
     3     string addBinary(string a, string b) {
     4         int sizea=a.size(),sizeb=b.size();
     5         if(sizea<sizeb)return addBinary(b,a);
     6         int n=sizea-sizeb;
     7         string helper(n,'0');
     8         b = helper + b;
     9         int carry=0;
    10         for(int i=sizea-1;i>=0;i--){
    11             int sum=(a[i]-'0')+(b[i]-'0')+carry;
    12             if(sum==0);
    13             else if(sum==1){
    14                 a[i]='1';
    15                 carry=0;
    16             }else if(sum==2){
    17                 a[i]='0';
    18                 carry=1;
    19             }else if(sum==3){
    20                 a[i]='1';
    21                 carry=1;
    22             }
    23         }
    24         if(carry==1)a='1'+a;
    25         return a;
    26     }
    27 };
    复制代码
  • 相关阅读:
    第六课 使用oflash软件烧写bin文件至开发板
    Linux查看、添加、修改PATH环境变量
    第七课 Linux裸机开发+SourceInsight3.5使用+notepad++使用
    第五课 Linux高级命令
    数组的方法总结
    浅谈 return false 和preventDefault stopPropagation stopImmediatePropagation 的正确用法
    实时统计输入的文字
    滚轮滚动事件
    window.onload和DOMReady
    JS获取浏览器可视区域的尺寸
  • 原文地址:https://www.cnblogs.com/irun/p/4709507.html
Copyright © 2011-2022 走看看