文章目录
一、前言
由于以前参加过集训,所以今天写的很快,继续水题~~
二、题目
1)371. 两整数之和
1.a)代码:
class Solution {
public int getSum(int a, int b) {
return a+b;
}
}
2)面试题 17.01. 不用加号的加法
2.a)代码:
class Solution {
public int add(int a, int b) {
return a+b;
}
}
3)剑指 Offer 65. 不用加减乘除做加法
3.a)代码:
class Solution {
public int add(int a, int b) {
return a+b;
}
}
ps:三题都被水了…
4)面试题 08.05. 递归乘法
4.a)代码:
class Solution {
public int multiply(int a, int b) {
return a*b;
}
}
5)29. 两数相除
5.a)代码:
class Solution {
public int divide(int dividend, int divisor) {
if(dividend==-2147483648 && divisor==-1 )
return 2147483647;
else
return dividend/divisor;
}
}
ps:这题需要考虑除法的结果会溢出,溢出的情况是 d i v i d e n d = = − 2147483648 和 d i v i s o r = = − 1 dividend== -2147483648 和 divisor==-1 dividend==−2147483648和divisor==−1 。 不能忽略!!!!
6)50. Pow(x, n)
6.a)代码:
class Solution {
public double myPow(double x, int n) {
long N = n;
return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
}
public double quickMul(double x, long N) {
if (N == 0) {
return 1.0;
}
double y = quickMul(x, N / 2);
return N % 2 == 0 ? y * y : y * y * x;
}
}
7)69. x 的平方根
7.a)代码:
int mySqrt(int x){
return (int)sqrt(x);
}
8)面试题 16.07. 最大数值
8.a)代码:
class Solution {
public int maximum(int a, int b) {
long c = a;
long d = b;
int res = (int) ((Math.abs(c-d) + c + d)/2);
return res;
}
}
9)2119. 反转两次的数字
9.a)分析:
对于任何一个正整数,无论反转几次都不会出现前几位的数字为零,所以只有当原数字的最后含有 0 0 0时,才会出现反转后的数字与原数字不同;由此可得非负整数进行两次反转操作不变的充要条件即为:该整数为 0 0 0 或该整数结尾不含 0 0 0。而后者等价于该数 %10 的余数不为 0 0 0。我们按照该条件判断并相应返回结果即可。
9.b)代码:
class Solution {
public boolean isSameAfterReversals(int num) {
return num == 0 || num % 10 != 0;
}
}
三、做题记录:
四、今日总结:
今天的题目相对比较简单,但还是要注意细节的考虑,对于变量的取值范围要考虑清楚,不能粗心!!!