本文主要是介绍Leetcode 137. Single Number II(位运算),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
描述
给一个数组,只有一个数字重复1次,其他数字重复三次,找出重复一次数字。
Solution
这道题是之前那道 Single Number单独的数字 的延伸,我们可以建立一个32位的数字,来统计每一位上1出现的个数,我们知道如果某一位上为1的话,那么如果该整数出现了三次,对3去余为0,我们把每个数的对应位都加起来对3取余,最终剩下来的那个数就是单独的数字。
class Solution
{public:int singleNumber(vector<int> &nums){int res = 0;for (int i = 0; i < 32; i++) //遍历每一个数字的每一位数字{int sum = 0;for (int j = 0; j < nums.size(); j++) //遍历数组中每一个数字{//将数字第i位取出来,累计到sum中sum = sum + ((nums[j] >> i) & 1);}// 如果某一位出现三次则模3后会成为0sum %= 3;// 将模3后的第i位填充到res中res = res | (sum << i);}return res;}
};
参考:http://www.cnblogs.com/grandyang/p/4263927.html
这篇关于Leetcode 137. Single Number II(位运算)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!