加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

67. 二进制求和

发布时间:2020-12-14 04:22:18 所属栏目:大数据 来源:网络整理
导读:Given two binary strings,return their sum (also a binary string). The input strings are both?non-empty?and contains only characters? 1 ?or? 0 . Example 1: Input: a = "11",b = "1"Output: "100" Example 2: Input: a = "1010",b = "1011"Output:

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

The input strings are both?non-empty?and contains only characters?1?or?0.

Example 1:

Input: a = "11",b = "1"
Output: "100"

Example 2:

Input: a = "1010",b = "1011"
Output: "10101"

给定两个二进制字符串,返回他们的和(用二进制表示)。

输入为非空字符串且只包含数字?1?和?0

示例?1:

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

示例?2:

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

 1 class Solution {
 2     //从最低位加到最高位,当前位相加结果是%2,进位是/2,
 3     //记得处理每一次的进位和最后一次的进位,最后反向输出字符。
 4     func addBinary(_ a: String,_ b: String) -> String {
 5         //存储字符的输出变量
 6         var str:String = String()
 7         //获取a的字符数量
 8         var i:Int = a.count-1
 9         //获取b的字符数量
10         var j:Int = b.count-1
11         //进位标志
12         var carry:Int = 0
13         while(i>=0 || j>=0)
14         {
15             var sum:Int = carry
16             if i>=0
17             {
18                 //获取该索引的字符
19                 var char:Character = a[a.index(a.startIndex,offsetBy: i)]
20                 //将字符转换成整数
21                 for code in char.unicodeScalars {
22                     //字符 0 的ASCII码为48
23                     sum += (Int(code.value) - 48)
24                 }
25                 //自减
26                 i-=1
27             }
28             if j>=0
29             {
30                 //获取该索引的字符
31                 var char:Character = b[b.index(b.startIndex,offsetBy: j)]
32                 //将字符转换成整数
33                 for code in char.unicodeScalars {
34                     //字符 0 的ASCII码为48
35                     sum += (Int(code.value) - 48)
36                 }                
37                 //自减
38                 j-=1
39             }
40             //转换为临时字符串
41             var temp = String(sum % 2)
42             //追加到字符串末尾
43             str.append(temp[temp.startIndex])     
44             carry = sum/2
45         }
46         if carry != 0
47         {
48              //转换为临时字符串
49              var  temp = String(carry)
50             //追加到字符串末尾
51              str.append(temp[temp.startIndex])
52         }
53         //返回逆序字符串
54         return String(str.reversed())
55     }
56 }


版本:16ms

 1 class Solution {
 2     func addBinary(_ a: String,_ b: String) -> String {
 3         var reversedResult = ""
 4         let aChars = Array(a),bChars = Array(b)
 5         var aIndex = aChars.count - 1,bIndex = bChars.count - 1
 6         var hasCarryOver = false
 7         while aIndex >= 0 || bIndex >= 0 || hasCarryOver {
 8             var sum = 0
 9             if aIndex >= 0 && aChars[aIndex] == "1" {
10                 sum += 1
11             }
12             if bIndex >= 0 && bChars[bIndex] == "1" {
13                 sum += 1
14             }
15             if hasCarryOver {
16                 sum += 1
17             }
18             reversedResult.append(String(sum % 2))
19             hasCarryOver = sum > 1
20             aIndex -= 1
21             bIndex -= 1
22         }
23         return String(reversedResult.reversed())
24     }
25 }


版本:20ms

 1 class Solution {
 2     func addBinary(_ a: String,_ b: String) -> String {
 3         var str1 = Array(a)
 4         var str2 = Array(b)
 5         
 6         var result: [Character] = []
 7         
 8         var hasRemain = false
 9         while !(str1.isEmpty) || !(str2.isEmpty) {
10             let first = str1.popLast() ?? "0"
11             let second = str2.popLast() ?? "0"
12             
13             switch (first,second) {
14             case ("0","0"):
15                 result.append(hasRemain ? "1" : "0")
16                 hasRemain = false
17             case ("0","1"),("1","0"):
18                 if hasRemain {
19                     result.append("0")
20                 } else {
21                     result.append("1")
22                 }
23             case ("1","1"):
24                 result.append(hasRemain ? "1" : "0")
25                 hasRemain = true
26             default: break
27             }
28         }
29         
30         if hasRemain { result.append("1") }
31         
32         result = result.reversed()
33         return String(result)
34     }
35 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读