题意:
编写一个函数,不用临时变量,直接交换numbers = [a, b]
中a
与b
的值。
示例:
输入: numbers = [1,2] 输出: [2,1]
难度:★☆☆☆☆
答题代码:
class Solution {
public int[] swapNumbers(int[] numbers) {
numbers[0] = numbers[0] ^ numbers[1];
numbers[1] = numbers[0] ^ numbers[1];
numbers[0] = numbers[0] ^ numbers[1];
return numbers;
}
}
思路:用异或就可以进行交换。
---------------------------------------------------------------------------------------------------------------------------------
题意:
给你一个非负整数 num
,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。
难度:★☆☆☆☆
答题代码:
class Solution {
public int numberOfSteps(int num) {
int ans = 0;
while(num != 0)
{
if(num % 2 == 1)
{
num = num - 1;
ans++;
}else
{
num = num / 2;
ans++;
}
}
return ans;
}
}
---------------------------------------------------------------------------------------------------------------------------------
题意:
对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。
例如,整数 5 的二进制表示是 "101" ,取反后得到 "010" ,再转回十进制表示得到补数 2 。
给你一个整数 num ,输出它的补数。
难度:★★☆☆☆
思路:找到整数最高位的1后在左移一位并减1,然后与整数相减求出补数。值得注意的是java没有无符号类型,可能会超出int的最大范围。所以被减数取long类型,return时long类型和int类型相减要强转为int类型。
答题代码:
class Solution {
public int findComplement(int num) {
long x = 1;
while(num > x)
{
x <<= 1;
}
if(num == x)
{
return (int)x - 1;
}
return (int)x - 1 - num;
}
}
最后总结:三道题还是比较简单的,但就是要多练熟位运算的使用。