iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 9
0
自我挑戰組

Leetcode新手挑戰30天系列 第 9

#136 Single Number - 直接研究其他解法

  • 分享至 

  • xImage
  •  

前情提要

昨天查hash查著查著就睡著了...Orz
寫完今天這篇會在回去把查到的資料補上去。老實說查完Hash之後我還是不太理解如何實作出這題,會先研究下別人的解法,再看看昨天想到的方式是不是能用。

進入正題

這邊是我在(參考1)連結中找到的解法:

def singleNumber(self, nums):
    res = 0
    for i in nums:
        res ^= i
    return res

看完只覺得這個方法滿厲害的,他用XOR的方式把重複到的數字給刪掉
確認過python裡面"^"這個運算子是XOR的意思,
for i in nums: #這句是把列表裡的元素按照索引一個個輸出
res ^= i #這句則會從0開始,按照順序把列表裡面所有的元素都XOR一遍
因為重複兩次的數字互相做XOR後會變成0,所以XOR完列表中全部索引的數字後就會得到最終解答。
這個部落客還寫了另外兩種同樣概念的精簡版,也是很厲害。
可以到參考1的連結裡參考。

這題我另外找到了一個部落格介紹(參考2),也寫了很多種寫法,有array和hash的方式
但因為我想用hash的方式練習,所以我只有先看了他寫用array的作法

def singleNumber(self, nums):
    list = []
    for i in nums:
        if i in list:
            list.remove(i)
        else:
            list.append(i)
    return list.pop()

這個做法是先做一個空的結果列表,用新增移除的方式更新這個列表,讓他維持裡面的元素只會有一種這樣。
也是一個很有趣的作法。

參考資料

參考1: 136. Single Number [medium] (Python)
參考2: LeetCode 136 Single Number (Python)


上一篇
#136 Single Number
下一篇
#136 Single Number - 試著自己解看看
系列文
Leetcode新手挑戰30天31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言