给定一个整型数组,除了一个元素只出现一次外,其余每个元素都出现了三次。求出那个只出现一次的数。
解体思路:
整型数占32位,可以记下所有数每一位的总数,然后每一位对3取余,剩下的就是那个只出现了一次的数。
class Solution {
public int singleNumber(int[] nums) {
if (nums.length == 1)
return nums[0];
int[] count = new int[32];
for (int i = 0; i < nums.length; i++) {
int temp = nums[i];
//计算每一位上1的个数
for (int j = 0; j < count.length; j++) {
count[j] += (temp & 1);
temp = temp >> 1;
}
}
StringBuilder sBuilder = new StringBuilder();
for (int i = count.length - 1; i >= 0; i--) {
count[i] = count[i]% 3;
}
//负数
if(count[count.length-1]==1){
for (int i = count.length - 1; i >= 0; i--) {
count[i] = (count[i]+1)%2;
sBuilder.append(count[i]);
}
return -1*(Integer.valueOf(sBuilder.toString(), 2)+1);
}else{//正数
for (int i = count.length - 1; i >= 0; i--) {
sBuilder.append(count[i]);
}
return Integer.valueOf(sBuilder.toString(), 2);
}
}
}