137. Single Number II

    /*
     * 137. Single Number II
     * 2016-5-22 by Mingyang
     * 这道题目就是我的思路,你想啊,每一个数都用二进制来表示,每一个位上面的1的个数之和应该是3的整数倍
     * 如果不是的话,那么那位就是多的1,所以我们用1来&就可以知道所有第一位上的情况,然后1要移动变为10,也可以将
     * 要检查的数字移动,往右边移动一位,这样第二位也就移动到第一位来了,同时相应的数组也记数
     * 这样我们在后面得到了一个数组包含了很多1的数量在上面,最后我们再把每一位模3以后还原,加到res上面
     */
     public int singleNumber1(int[] A) {  
         if(A.length == 0||A==null)  
            return 0;      
        int[] cnt = new int[32];  
        for(int i = 0; i < A.length; i++){  
            for(int j = 0; j < 32; j++){  
                if( (A[i]>>j & 1) ==1){  
                    cnt[j]++;  
                }  
            }  
        }  
        int res = 0;  
        for(int i = 0; i < 32; i++){  
            res += (cnt[i]%3 << i);
          //res |= (cnt[i]%3 << i);
        }  
        cnt = null;  
        return res;  
    }
原文地址:https://www.cnblogs.com/zmyvszk/p/5518726.html