plus-one
题目描述:
Given a number represented as an array of digits, plus one to the number.
思路解析:
- 计算加1后的数值
- 高位在数组的开头,所以要从数组的最后开始检查每一位数字是不是小于9,如果是的话,直接加9就行了
- 如果是小于9的就不用循环了,如果是大于9的就需要位数加1,需要加1
- 然后判断高位是0,那么就表示进位了,就需要新建一个数组,向后移动一位
代码:
public class Solution {
public int[] plusOne(int[] digits) {
int length=digits.length;
for(int i=length-1;i>=0;i--){
if(digits[i]<9){
digits[i]++;
break;
}else{
digits[i]=0;
}
}
int[] newdigits;
if(digits[0]==0){
newdigits = new int[digits.length+1];
newdigits[0]=1;
for(int i=1;i<newdigits.length;i++){
newdigits[i]=digits[i-1];
}
}else
return digits;
return newdigits;
}
}
sqrtx
题目描述:
Implementint sqrt(int x).
Compute and return the square root of x.
思路解析:
- 开方,可以使用二分法,如果mid*mid=x,那么返回mid就可以了
- 如果mid*mid>x,那么high=mid-1;mid*mid<x,那么low=mid+1
- 当target不在数组中,low指向大于target的那个值,high指向小于target的那个值,由于需要向下取整,所以返回high
- 另外由于java的Integer的范围是-2147483648到2147483647,所以使用long型
代码:
public class Solution {
public int sqrt(int x) {
int low =0;
int high = x;
while(low<=high){
long mid = (long)(low+high)/2;
if(mid*mid<x){
low = (int)mid+1;
}else if(mid*mid>x){
high =(int)mid-1;
}else{
return (int)mid;
}
}
return high;
}
}