367
定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
16=4X4
代码
class Solution {
public boolean isPerfectSquare(int num) {
/**暴力求解法 */
// if(num==1){
// return true;
// }
// for(int i=2;i<num;i++){
// if(i*i==num){
// return true;
// }
// }
// return false;
int left=0;
int right=num;
while(right>=left){
int mid=(right-left)/2+left;
long res=(long)mid*mid;
if(res>num){
right=mid-1;
}
else if(res<num){
left=mid+1;
}else{
return true;
}
}
return false;
}
}
563
代码
class Solution {
public int findTilt(TreeNode root) {
if(root==null){
return 0;
}
//将左右子树的坡度,还有当前节点的坡度加起来
return findTilt(root.left)+findTilt(root.right)+ Math.abs(sum(root.left)-sum(root.right));
}
//计算当前节点的坡度
public int sum(TreeNode node){
if(node==null){
return 0;
}
return sum(node.left)+sum(node.right)+node.val;
}
}
278
题目
每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。
假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。
思路
二分查找法,如果中间版本都有问题,那前面的都有问题,如果中间版本没问题,那有问题的一定在中间版本之后
/* The isBadVersion API is defined in the parent class VersionControl.
boolean isBadVersion(int version); */
public class Solution extends VersionControl {
/**二分查找法 */
public int firstBadVersion(int n) {
int left=0;
int right=n;
while(right>=left){
int mid=left+(right-left)/2;
if(!isBadVersion(mid)){
left=mid+1;
}else{
right=mid-1;
}
}
return left;
}
}
1025
代码
class Solution {
public boolean divisorGame(int n) {
/**如果游戏开始时Alice拿到N为奇数,那么她必输,如果拿到N为偶数,结果就是true。
*/
return n%2==0;
}
}