2021-03-23
实现 int sqrt(int x) 函数。
计算并返回 x 的平方根,其中 x 是非负整数。
由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
/**
* @param {number} x
* @return {number}
*/
var mySqrt = function(x) {
const sqrt = Math.floor(x/2);
if(sqrt*sqrt === x){
return sqrt;
} else if(sqrt*sqrt > x){
return test(sqrt, 0, x);
} else{
return test(x, sqrt, x);
}
};
var test = function(num1, num2, x){
if(num1*num1 > x && num2*num2 < x){
if(num1 - num2 > 1){
const sqrt = num2 + Math.floor((num1 - num2)/2);
if(sqrt*sqrt === x){
return sqrt;
} else if(sqrt*sqrt > x){
return test(sqrt, num2, x);
} else{
return test(num1, sqrt, x);
}
} else {
return num2;
}
} else if(num1*num1 === x){
return num1;
} else if(num2*num2 === x){
return num2;
}
}
2021-03-24
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。
一看题很经典的一个动态规划然后翻车了
/**
* @param {number} n
* @return {number}
*/
var climbStairs = function(n) {
if(n === 1){
return 1;
} else if(n === 2){
return 2;
} else {
return climbStairs(n-1) + climbStairs(n-2);
}
};
然后时间超限了…
之后:
/**
* @param {number} n
* @return {number}
*/
var climbStairs = function(n) {
// if(n === 1){
// return 1;
// } else if(n === 2){
// return 2;
// } else {
// return climbStairs(n-1) + climbStairs(n-2);
// }
const list = new Array(n + 1).fill(0);
list[0] = 1;
list[1] = 1;
for (let i = 2; i < list.length; i++) {
list[i] = list[i - 2] + list[i - 1];
}
return list[n];
};
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sqrtx