九日集训做题记录
day01
题目一 371
法一:直接求和:
class Solution {
public:
int getSum(int a, int b) {
return a+b;
}
};
法二:位运算(待补)
题目二 17.01
法一:
class Solution {
public:
int add(int a, int b) {
return a+b;
}
};
法二:待补
题目三 剑指offer65
法一:
class Solution {
public:
int add(int a, int b) {
return a+b;
}
};
法二(待补)
题目四 08.05
法一 位运算:
class Solution {
public:
int multiply(int A, int B) {
int ans=0;
for(long long a=max(A,B),b=min(A,B);b;b>>=1,a+=a)if(b&1)ans+=a;
return ans;
}
};
法二 递归:
class Solution {
public:
int C(int A,int B) {
int sum=0;
if(B==0) return 0;
return A+C(A,B-1);
}
int multiply(int A, int B) {
return C(A,B);
}
};
法三 递推:
class Solution {
public:
int multiply(int A, int B) {
int p=0;
for(int i=1;i<=B;++i) {
p=p+A;
}
return p;
}
};
法四(直接乘):
在这里插入代码片
法五(数组):
class Solution {
public:
int multiply(int A, int B) {
char a[A][B];
return sizeof(a);
}
};
题目五 29.
法一:
直接除
注意(记得防溢出)
class Solution {
public:
int divide(int a, int b) {
if(a==-2147483648&&b==-1) return 2147483647;
return a/b;
}
};
法二: (待补)
题目六 50
法一(利用pow函数):
class Solution {
public:
double myPow(double x, int n) {
return pow(x,n);
}
};
法二(快速幂):
class Solution {
public:
double quickMul(double x, long long N) {
if (N == 0) {
return 1.0;
}
double y = quickMul(x, N / 2);
return N % 2 == 0 ? y * y : y * y * x;
}
double myPow(double x, int n) {
long long N = n;
return N >= 0 ? quickMul(x, N) : 1.0 / quickMul(x, -N);
}
};
题目七 69
法一(二分):
class Solution {
public:
int mySqrt(int x) {
if(x==0) return 0;
int left=1,right=x;
long long mid;
while(left<=right) {
mid=left+(right-left)/2;
if(mid*mid==x) return mid;
else if(mid*mid>x) right=mid-1;
else left=mid+1;
}
return right;
}
};
法二(函数):
class Solution {
public:
int mySqrt(int x) {
return sqrt(x);
}
};
题目八 16.07
法一:
class Solution {
public:
int maximum(int a, int b) {
return a>b?a:b;
}
};
题目九 2119
法一(判断尾数零,零特例):
class Solution {
public:
bool isSameAfterReversals(int num) {
if(num==0) return 1;
if(num%10==0) return 0;
return 1;
}
};