荧光字体制作网站,学历提升的正规机构,免费网站空间怎么,h5产品是什么意思leetcode67. 二进制求和
给你两个二进制字符串 a 和 b #xff0c;以二进制字符串的形式返回它们的和。
示例 1#xff1a; 输入:a “11”, b “1” 输出#xff1a;“100”
示例 2#xff1a; 输入#xff1a;a “1010”, b “1011” 输出#xff1a;“10101”
…leetcode67. 二进制求和
给你两个二进制字符串 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” 就不含前导零
题目描述
给定两个二进制字符串返回它们相加的结果。
算法分析
这个问题可以通过直接模拟二进制加法来解决。我们首先确保两个字符串的长度相同然后从右向左逐位相加。如果某一位相加的结果大于 1则需要进位。最后我们将结果转换为字符串形式。
算法步骤
初始化两个字符串 a 和 b。使用循环和字符串操作确保 a 和 b 的长度相同。从右向左遍历 a 和 b 的每个字符进行二进制加法。如果某一位相加的结果大于 1则需要进位。将最终的结果转换为字符串形式。如果最高位是 1则需要在结果前添加字符 ‘1’。
算法流程 #mermaid-svg-jjJ3qxPYfw7aKiv1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .error-icon{fill:#552222;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .marker.cross{stroke:#333333;}#mermaid-svg-jjJ3qxPYfw7aKiv1 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .cluster-label text{fill:#333;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .cluster-label span{color:#333;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .label text,#mermaid-svg-jjJ3qxPYfw7aKiv1 span{fill:#333;color:#333;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .node rect,#mermaid-svg-jjJ3qxPYfw7aKiv1 .node circle,#mermaid-svg-jjJ3qxPYfw7aKiv1 .node ellipse,#mermaid-svg-jjJ3qxPYfw7aKiv1 .node polygon,#mermaid-svg-jjJ3qxPYfw7aKiv1 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .node .label{text-align:center;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .node.clickable{cursor:pointer;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .arrowheadPath{fill:#333333;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .cluster text{fill:#333;}#mermaid-svg-jjJ3qxPYfw7aKiv1 .cluster span{color:#333;}#mermaid-svg-jjJ3qxPYfw7aKiv1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-jjJ3qxPYfw7aKiv1 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 开始 初始化两个字符串 a 和 b 确保 a 和 b 的长度相同 从右向左进行二进制加法 处理进位 将结果转换为字符串 处理最高位的进位 结束 具体代码
class Solution {
public:string addBinary(string a, string b) {int al a.size();int bl b.size();while(al bl) //让两个字符串等长若不等长在短的字符串前补零否则之后的操作会超出索引{a 0 a; al;}while(al bl){b 0 b; bl;}for(int j a.size() - 1; j 0; -- j) //从后到前遍历所有的位数同位相加{a[j] a[j] - 0 b[j];if(a[j] 2) //若大于等于字符‘2’需要进一{a[j] (a[j] - 0) % 2 0;a[j-1] a[j-1] 1;}}a[0] a[0] - 0 b[0]; //将ab的第0位相加if(a[0] 2) //若大于等于2需要进一{a[0] (a[0] - 0) % 2 0;a 1 a;}return a;}
};
算法分析
复杂度分析
时间复杂度O(max(a.size(), b.size())其中 a.size() 和 b.size() 分别是两个字符串的长度。空间复杂度O(1)我们不需要额外的空间来存储数据。
易错点
在确保两个字符串长度相同时确保正确地添加零。在进行二进制加法时确保正确地处理进位。在将结果转换为字符串时确保正确地处理最高位的进位。
注意事项
确保在处理字符串时不要超出字符串的边界。在进行字符转换时确保不会覆盖任何字符。
相似题目
题目链接二进制加法https://leetcode.com/problems/add-binary/反转字符串https://leetcode.com/problems/reverse-string/字符串转换整数https://leetcode.com/problems/string-to-integer-atoi/整数转换字符串https://leetcode.com/problems/integer-to-roman/