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 };
    复制代码
  • 相关阅读:
    C语言I博客作业03
    C语言I博客作业02
    macwingIDE python3.5 配置
    JAVA必会算法插入排序
    java匿名内部类的另一个用途
    JAVA必会算法选择排序
    Mac elasticsearch 5.2.2 单机双节点配置
    JAVA必会算法二分查找法
    AOP 事物连接,记忆连接数据库,连接池
    线程的意义与一些常见面试问题
  • 原文地址:https://www.cnblogs.com/irun/p/4709507.html
Copyright © 2011-2022 走看看