题目一
思路分析
二分查找法:
要查找目标数的算术平方根k,则K*k <=x,则可以利用二分法查找0-x之间的数,看是否与其匹配。
代码实现
class Solution {
public int mySqrt(int x) {
//使用二分查找
int left=0,right=x,ans=-1;
while(left<=right){
//中间值
int middle=left+(right-left)/2;
//判断中间值的平方与目标值之间的关系
if((long)middle*middle<=x){
//将目标值赋值给整数部分
ans=middle;
//指针重置
left=middle+1;
}else{
//指针重置
right=middle-1;
}
}
return ans;
}
}
题目二
思路分析
动态规划问题
分两种情况:
先爬一步:在加上后面的n-1阶楼梯爬法
先爬两步:再加上后面n-2阶楼梯爬法
将两种情况相加,即得到爬楼梯的总方法数
代码实现
class Solution {
public int climbStairs(int n) {
//先定义动态数组
int[] array=new int[n+1];
//初始化数组的前两个阶梯
array[0]=1;
array[1]=1;
//遍历,每增加一节楼梯,则到达该楼梯层有多少种方法
for(int i=2;i<=n;i++){
array[i]=array[i-1]+array[i-2];
}
//返回到达第n层,共有多少总方法
return array[n];
}
}