我正在解决问题。这是我写的代码
class Solution {
public:
Solution ()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
}
int singleNumber(vector<int>& nums) {
int ans = 0;
for(int i = 0 ; i < 32 ; i++)
{
int count = 0 ;
for(int j = 0 ; j < nums.size() ; j++)
{
if((nums[j]&(1<<i))==1) count++;
}
if(count%3!=0) ans = ans|(1<<i);
}
return ans;
}
};
对于 nums = [2,2,3,2] 的输入,我的输出是 1,但预期输出是 3。
正确的代码如下
class Solution {
public:
Solution ()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
}
int singleNumber(vector<int>& nums) {
int ans = 0;
for(int i = 0 ; i < 32 ; i++)
{
int count = 0 ;
for(int j = 0 ; j < nums.size() ; j++)
{
if((nums[j]&(1<<i))!=0) count++;
}
if(count%3!=0) ans = ans|(1<<i);
}
return ans;
}
};
这两个代码仅在
if((nums[j]&(1<<i))!=0) count++;
条件下有所不同,对我来说似乎相同。我错过了什么?
仅当
(nums[j]&(1<<i))==1
的值为 (nums[j]&(1<<i))
时,您的条件 1
才为真。
另一方面,只要
(nums[j]&(1<<i))!=0
的值不是 (nums[j]&(1<<i))
,条件 0
就为真。
(nums[j]&(1<<i))
可以是 0
和 1
以外的值。例如,当 2
和 nums[j]=3
时,值为 i=1
。
如果您想使用
==1
,您可以使用((nums[j]>>i)&1)==1
。