当前位置: 首页 > news >正文

【LeetCode - 每日一题】1073. 负二进制数相加 (2023.05.18)

1073. 负二进制数相加

题意

  • 基数为 -2 。
  • 实现两个 0/1 数组串的加法。

解法

这是一道模拟题。

arr1[i]arr2[i] 是数组 arr1arr2 从低到高的第 i 位数。

首先回顾普通的二进制数的相加,从低位开始计算,在计算的同时维护用一个变量 carry 维护进位信息,因此,对于第 i 位的结果 ans[i] = arr1[i] + arr2[i] + carry。若 ans[i] = 0, 1,则更新 carry = 0,ans[i] = 0, 1;若 ans[i] = 2, 3,则更新 carry = 1,ans[i] = ans[i] - 2。

类比到基数为 -2 的二进数相加上,从低位开始计算,在计算的同时用一个变量 carry 维护进位信息,同样地,对于第 i 为的结果 ans[i] = arr1[i] + arr2[i] + carry。则此时的 carry 的范围变成了 [-1, 0],ans[i] 的范围变成了 [-1, 0, 1, 2]。若 ans[i] = 0, 1,则更新 carry = 0,ans[i] = 0, 1;若 ans[i] = 2,则更新 carry = -1(因为相邻位的正负号是反的,所以进位一定是 -1 ),ans[i] = ans[i] - 2;若 ans[i] = -1,此时是一种特殊情况,需要单独讨论:

当 ans[i] = -1 时,需要将其进行转换。又注意到:
(-2)i+1 + (-2)i = - (-2)i,所以将 ans[i] 赋为 -1 和将 ans[i] 和 ans[i+1] 都加 1 的效果是一样的,因此更新 carry = 1,ans[i] = 1。

// 官方解法
class Solution {
public:vector<int> addNegabinary(vector<int>& arr1, vector<int>& arr2) {vector<int> ans;int idx1 = arr1.size() - 1, idx2 = arr2.size() - 1;int carry = 0;while(idx1 >= 0 || idx2 >= 0 || carry) 	// carry 要放在 while 循环条件里{int x = carry;if(idx1 >= 0){x += arr1[idx1];}if(idx2 >= 0){x += arr2[idx2];}idx1 --;idx2 --;if(x >=2){ans.push_back(x - 2);carry = -1;}else if (x >= 0){ans.push_back(x);carry = 0;}else{ans.push_back(1);carry = 1;}}// 删去前置 0 while(ans.size() > 1 && ans.back() == 0){ans.pop_back();}reverse(ans.begin(), ans.end());return ans;}
};

http://www.lryc.cn/news/68711.html

相关文章:

  • 软件上线会面临哪些缺陷?这四种你一定很熟悉
  • html监听界面被隐藏或显示
  • Springboot启动失败 DB连不上竟然是maven配置的问题
  • P9234 [蓝桥杯 2023 省 A] 买瓜 题解
  • ThingsBoard自定义分发节点duplicate to related
  • vim自动更新ctags与taglist
  • linux查看日志常用命令,动态日志命令
  • 分段存储管理方式
  • 将nacos从本地切换到远程服务器上时报错:客户端端未连接,Client not connected
  • 系统掌握入河排污口设置论证技术、方法及报告编制框架
  • 服务端渲染
  • 干货丨警惕!14个容易导致拒稿的常见错误
  • Web基础 ( 二 ) CSS
  • MSQL系列(一) Mysql实战-索引结构 二叉树/平衡二叉树/红黑树/BTree/B+Tree
  • 理论力学专题:张量分析
  • 索引失效情况
  • pv操作练习题
  • 【小菜鸡刷题记】--字符串篇
  • Sonar加入jenkins流水线
  • FSW26现金回收RS FSW43 信号和频谱分析仪
  • GraphPad Prism 9.5.1 for Mac 操作简便功能强大且实用的医学绘图分析工具
  • 六. Activity启动模式
  • 本机连接aws的ec2时报错:所选用户的用户密钥未在远程主机上注册
  • 谁看见我的猫照片了
  • 数据结构与算法之深度优先算法详解
  • C# 给winfrom窗体添加皮肤控件
  • 数据分析真的很火吗?真的有很多企业需要这样的岗位吗?求大佬指点。
  • 100 个 Go 错误以及如何避免:9~12
  • 用户/用户组管理
  • 如何进行TCP抓包调试?