题目:
在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
解法
解法一:循环遍历
思想:循环遍历,取出的每个数字分别与列表里的所有数字比较,有相同的就加一。统计count,如果count为1就打印出x。如果不是就说明不是想要的数字用continue跳出内循环。
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
for x in nums:
count=0
for y in nums:
if x==y:
count=count+1
if count == 1:
return x
else:
continue
解法二:二进制取余法
思想:
统计所有数字二进制位的和
判断每一位的和能否被3整除,求解最后结果
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
bitSum = [0] *32 #定义存储各个位的数组
for i in nums: #统计各位之和
mask = 1
# 一位一位的判断,从最后一位开始,
# reversed(range(32)) ---[31,,,0]
for j in reversed(range(32)):
# 位上如果为1就会mask与之后为1
if mask & i:
bitSum[j] += 1
mask = mask << 1
# 每位分别去% 3,得到的数就是result
result = 0
for i in range(32):# 得到最终结果
result = result << 1
result += bitSum[i] % 3
return result
(以下解法二,解法一结果)