劍指 Offer 56 - II. 陣列中數字出現的次數 II
作者:由 櫻黯雨 發表于 詩詞時間:2021-07-06
題目描述
在一個數組 nums 中除一個數字只出現一次之外,其他數字都出現了三次。請找出那個只出現一次的數字。
示例 1:
輸入:nums = [3,4,3,3]
輸出:4
示例 2:
輸入:nums = [9,1,7,9,7,9,7]
輸出:1
解題思路1: Map法
示例程式碼: 略
解題思路2: 位運演算法
K神題解
1。 我們將每個數都變成二進位制位, 將每個二進位制位的1/0進行相加儲存起來
2。 將每個二進位制位的和對3取餘, 那麼所有出現三次的二進位制位就會變成0
3。 剩下的為1的二進位制位所組成的數就是出現一次的數
K神是用二進位制實現自動狀態機來處理每個二進位制位, 實力有限, 我是直接實現了這個過程。。。
示例程式碼:
def
singleNumber
(
self
,
nums
:
List
[
int
])
->
int
:
bits
=
[
0
]
*
34
# 宣告一個數組用來儲存二進位制位的和
for
n
in
nums
:
bstr
=
str
(
bin
(
n
))
lstr
=
len
(
bstr
)
for
i
in
range
(
2
,
lstr
):
# 迴圈對每個二進位制位進行相加
bits
[
-
(
lstr
-
i
)]
+=
int
(
bstr
[
i
])
bitStr
=
“0”
for
i
in
range
(
2
,
len
(
bits
)):
bits
[
i
]
=
bits
[
i
]
%
3
# 對3取餘
bitStr
+=
str
(
bits
[
i
])
return
int
(
bitStr
,
2
)