LeetCode之只出現一次的數字-Swift

godiscoder發表於2019-01-14

問題描述

給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。

示例

示例 1:
輸入: [2,2,1]
輸出: 1

示例 2:
輸入: [4,1,2,1,2]
輸出: 4
複製程式碼

答案

本次題目可以採用異或(^)來解決。

異或的規則:

0 ^ 0 = 0
0 ^ 1 = 1
1 ^ 0 = 1
1 ^ 1 = 0
複製程式碼

總結

  • 任何數異或0等於該數本身
  • 兩個相同的數異或等於0
  • 通過二進位制進行位數相加

程式碼如下:

func singleNumber(_ nums: [Int]) -> Int {
    var singleNum = 0
    for num in nums {
        singleNum = singleNum ^ num
    }
    return singleNum
}
複製程式碼

nums = [2,3,4,3,2]的執行結果如下:

第一次迴圈:
0 ^ 2 = 2
二進位制:0 + 10 = 10
第二次迴圈:
2 ^ 3 = 1
二進位制:10 + 11 = 1
第三次迴圈:
1 ^ 4 = 5
二進位制:1 + 100 = 101
第四次迴圈:
5 ^ 3 = 6
二進位制:101 + 11 = 110
第五次迴圈:
6 ^ 2 = 4
二進位制:110 + 10 = 100

複製程式碼

結語

語言是招式,演算法是內功。希望我們勤練內功,早日成就自己的江湖!

相關文章