【刷力扣 TS 版】难度 简单,二进制求和

简介: 【刷力扣 TS 版】难度 简单,二进制求和

原文来自我的个人博客

前言

拒绝摆烂ヾ(◍°∇°◍)ノ゙

从今天开始(2023/02/12),定一个小目标,先刷个 300Leetcode 题目(之前刷的不计入)。

当然作为一个小前端,我选择的语言是 TS,而且刷的题目的难度会偏中等一些,大概按照 简单3 中等6 困难1 这样的题型分布吧。嗯,目前是这么打算的。

本题 Github 地址:因为比较喜欢 vscode 的界面,而且方便调试,所以 AC 完就顺便提到 github 了,也算做一个记录吧。

本篇是这个系列的第 NO.1 篇,这是 Leetcode 上第 76 道题 二进制求和, 难度为 简单

我们开始吧,Here We Go~

1. 题目描述

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

示例 1:

输入: a = "11", b = "1"
输出: "100"

示例 2:

输入: a = "1010", b = "1011"
输出: "10101"

 

提示:

  • 1 <= a.length, b.length <= 104
  • a 和 b 仅由字符 '0' 或 '1' 组成
  • 字符串如果不是 "0" ,就不含前导零

2. 解一:模拟

这是一种很容易理解的方法

我们可以借鉴「列竖式」的方法,末尾对齐,逐位相加。在十进制的计算中「逢十进一」,二进制中我们需要「逢二进一」。

具体的操作:

  1. 我们先通过比较两个字符串的长度,通过 padStart 方法将它们的长度补齐(前面补 0

,这样会利于相加操作。

  1. 从后往前遍历两个字符串,对两个数字做加法操作,要注意溢出的数字对后一位数的影响
  2. 判断最后是否有溢出,有的话在 ret 前面 +1
function addBinary(a: string, b: string): string {
  const n1: number = a.length;
  const n2: number = b.length;
  if (n1 > n2) {
    b = b.padStart(n1, "0");
  } else {
    a = a.padStart(n2, "0");
  }

  const n: number = a.length;
  let ret: string = "";
  let d: number = 0;
  for (let i = n - 1; i >= 0; i--) {
    const temp = parseInt(a[i]) + parseInt(b[i]) + d;
    ret = (temp % 2) + ret;
    d = Math.floor(temp / 2);
  }
  if (d > 0) ret = d + ret;
  return ret;
}

复杂度分析

  • 时间复杂度:O(n),这里的时间复杂度来源于顺序遍历 a 和 b
  • 空间复杂度:O(1),除去答案所占用的空间,这里使用了常数个临时变量。
相关文章
|
前端开发 Go 对象存储
【刷力扣 TS 版】难度 简单,x 的平方根 & 验证回文串
【刷力扣 TS 版】难度 简单,x 的平方根 & 验证回文串
【刷力扣 TS 版】难度 简单,x 的平方根 & 验证回文串
|
存储 算法 前端开发
【刷力扣 TS 版】难度 中等 链表专题(四)
【刷力扣 TS 版】难度 中等 链表专题(四)
【刷力扣 TS 版】难度 中等 链表专题(四)
|
存储 前端开发
【刷力扣 TS 版】难度 中等 链表专题(三)
【刷力扣 TS 版】难度 中等 链表专题(三)
【刷力扣 TS 版】难度 中等 链表专题(三)
|
算法 前端开发 Go
【刷力扣 TS 版】难度 简单 链表专题(二)
【刷力扣 TS 版】难度 简单 链表专题(二)
【刷力扣 TS 版】难度 简单 链表专题(二)
|
前端开发 测试技术 Go
【刷力扣 TS 版】难度 简单 链表专题(一)
【刷力扣 TS 版】难度 简单 链表专题(一)
【刷力扣 TS 版】难度 简单 链表专题(一)
|
前端开发
【刷力扣 TS 版】难度 中等 三数&四数之和
【刷力扣 TS 版】难度 中等 三数&四数之和
【刷力扣 TS 版】难度 中等 三数&四数之和
|
存储 前端开发 JavaScript
【刷力扣 TS 版】难度 简单 队列&栈专题
【刷力扣 TS 版】难度 简单 队列&栈专题
【刷力扣 TS 版】难度 简单 队列&栈专题
|
机器学习/深度学习 算法
51Nod 1004 n^n的末位数字(日常复习快速幂,莫名的有毒,卡mod值)
1004 n^n的末位数字 题目来源: Author Ignatius.L (Hdu 1061) 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 给出一个整数N,输出N^N(N的N次方)的十进制表示的末位数字。
1118 0
|
C++
C++程序设计实践学材系列(19)——1.4.2 输出两数中大值程序的其他写法
回到系列文章的目录——[系列文章目录]  回到本章目录——[第1章目录]    1.4.2 输出两数中大值程序的其他写法   例1.4 输入两个整数,求这两数中的大者并输出采取的思路是: 输入a、b的值 根据a、b的大小关系,为m赋值其中的大者 输出m的值   还可以写出下面的程序://例程ch1-7.cpp #include &lt;iostream&gt; using namespace
1116 0
判断一个数是否为4的整数次幂(2的升级版--双份快乐)
判断一个数是否为4的整数次幂(2的升级版--双份快乐)

热门文章

最新文章