1.二进制中1的个数
public class Solution{
public int NumberOf1(int n){
int count=0;
while(n!=0){
count++;
n=(n-1)&n;
}
return count;
}
}
思路:直接将整数看成二进制,然后采用移位的方法
2.数值的整数次方
public class Solution{
public double Power(double base,int exponent){
double res=0;
if(equal(base,0)){
return 0;
}
if(exponent==0){
return 1.0;
}
if(exponent>0){
res=mutiply(base,exponent);
}else{
res=mutiply(1/base,-exponent);
}
return res;
}
public boolean equal(double a,double b){
if(a-b<0.000001&&a-b>-0.00001){
return true;
}
return false;
}
}
思路:1.任何数的0次方都为1;
2.当次方为正时,res=mutiply(base,exponent)
3.当次方为负时,res=mutiply(1/base,-exponent);
3.整数中1出现的次数
import java.util.*;
public class Solution{
public int NumberOf1Between1AndN_Solution(int n){
int count=0;
for(int i=1;i<=n;i*=10){
int a=n/i;
int b=n%i;
count+=(a+8)/10*i;
if(a%10==1){
count+=b+1;
}
}
return count;
}
}
思路:分别计算个位、十位、百位...上出现1的个数。
1.个位上(1~n)共出现(n/10)+1个1.
2.十位上(n/10)个位上的1的个数然后乘10.
3.都是加8进位。