实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。
题解
二分法
1 2 3 4 5 6 7 8 9 10 11 12 13 14
intmySqrt(int x){ if (!x||x==1)return x; int left = 0, right = x; //left不应从1开始,否则right=INT_MAX时,left+right会越界 int mid; while (left <= right) { mid = (left + right) / 2; if (x / mid >= mid && x / (mid+1) < (mid + 1))return mid; elseif (x / mid < mid)right = mid; else left = mid; } return left; }
题目描述
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。
题解
动态规划
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
intclimbStairs(int n){ if (n <= 2)return n; int step; int step1 = 1; int step2 = 2; int i = n - 3; while (i >= 0) { step = step1 + step2; step2 = step1; step1 = step; i--; } return step; }