概述
题目:
在一个数组 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
(以下解法二,解法一结果)
最后
以上就是土豪冷风为你收集整理的剑指刷题-面试题56 - II. 数组中数字出现的次数 II的全部内容,希望文章能够帮你解决剑指刷题-面试题56 - II. 数组中数字出现的次数 II所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复