【LeetCode 题】只出现一次的数字--其余数字都出现3次
🔶力扣上一道有意思的题,参考了评论区的解法,一起来学习
🍔思路说明:
🌟举例说明 :
nums = [2,2,3,2]我们需要把其中的数字 ‘3’ 找出来
1️⃣把每个数都想成32位的二进制数(这里举例用4位即可)
2️⃣每一位累加起来 如果不进行进位 因为其他数出现次数都是3次 那么每一位上的值要么是3n 要么是3n+1
👉3n说明目标值对这位没有贡献
👉3n+1说明目标值对这位有贡献
3️⃣最后将有贡献位都单独拿出来放在结果中 即可得到目标值
🍟代码展示:
这道题中涉及了一些位操作,写了许多注释,帮助理解
💧代码仅供参考:
class Solution { public: int singleNumber(vector<int>& nums) { int ret=0;//目标值 for(int i=0;i<32;i++) { //从32位中第一位开始统计统计 int mask=1<<i; //cnt用来记录该位上有多少个1 int cnt=0; for(int j=0;j<nums.size();j++) { if((nums[j]&mask)!=0) { //统计在这位上有多少个1 cnt++; } } //如果不是3倍 说明目标值对这位有贡献 if(cnt%3!=0) { //所以需要在结果中 将这位在结果中呈现 ret |= mask; } } return ret; } };
🌮结语:
🫡你的点赞和关注是作者前进的动力!
🌞最后,作者主页有许多有趣的知识,欢迎大家关注作者,作者会持续更新有意思的代码,在有趣的玩意儿中成长!