跟着博主一起刷题
这里使用的是题库:
https://leetcode.cn/problem-list/xb9nqhhg/?page=1
目录
- 剑指 Offer 62. 圆圈中最后剩下的数字
- 剑指 Offer 64. 求1+2+…+n
- 剑指 Offer 65. 不用加减乘除做加法
剑指 Offer 62. 圆圈中最后剩下的数字
剑指 Offer 62. 圆圈中最后剩下的数字
class Solution {
public int lastRemaining(int n, int m) {
int ret=0;
for(int i=2;i<=n;i++){
ret=(ret+m)%i;
}
return ret;
}
}
剑指 Offer 64. 求1+2+…+n
剑指 Offer 64. 求1+2+…+n
这道题主要考察我们对&&的短路特性的了解
class Solution {
private int sum=0;
public int sumNums(int n) {
boolean flag=n>0&&((sum+=n)>0);
boolean tmp=flag&&sumNums(n-1)>0;
return sum;
}
}
剑指 Offer 65. 不用加减乘除做加法
剑指 Offer 65. 不用加减乘除做加法
这道题明显利用位运算,思路如下:
异或运算^ :
a^b 又可称无进位加法,意思时如果a+b存在进位操作,直接抹去,这里的进位指的是二进制
与运算&:1&1=1,可以发现正好&运算可以来记录进位。
class Solution {
public int add(int a, int b) {
int xor=a^b;
int and=a&b;
while(and!=0){
int tmp=xor;
xor=xor^(and<<1);
and=tmp&(and<<1);
}
return xor;
}
}