leetcode 150道题 计划花两个月时候刷完之未完成后转,今天(第5天)完成了3道(111-113)150
111.(172. 阶乘后的零)题目描述:
给定一个整数 n ,返回 n! 结果中尾随零的数量。
提示 n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1
输入:n = 3
输出:0
解释:3! = 6 ,不含尾随 0
示例 2:
输入:n = 5
输出:1
解释:5! = 120 ,有一个尾随 0
第一版(今天题全是数学题。。原谅我真的看不懂。这个题意思就是求 5 的个数,然后每5个数后才出现一次)
class Solution {
public int trailingZeroes(int n) {
int count=0;
while(n!=0){
n/=5;
count+=n;
}
return count;
}
}
112.(69. x 的平方根 )题目描述:
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。
第一版(这个看了解题也没懂,这个二分查找是找有边界还是左边界。。欣赏一下吧)
class Solution {
public int mySqrt(int x) {
//二分查找
int left=0;
int right=x;
int ans=-1;
int mid=left+(right-left)/2;
while(left<=right){
mid=left+(right-left)/2;
if((long)mid*mid<=x){
ans=mid;
left=mid+1;
}else{
right=mid-1;
}
}
return ans;
}
}
113.(50. Pow(x, n))题目描述:
实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即,xn )。
第一版(我是暴力了,然后就超时了,看了解题这个感觉好理解,也感觉面试可能会出现,n 由 int 转为 long 是因为测试例子有一个超了)
class Solution {
public double myPow(double x, int n) {
long N=n;
double res=1.0;
boolean flag=false;
if(N<0){
flag=true;
N=-N;
}
while(N>0){
if(N%2==1){
res*=x;
}
x*=x;
N/=2;
}
if(flag){
return 1.0/res;
}
return res;
}
}
今天总结就是一个字:难!!!!