1.不用加减乘除算加法
public class Solution{
public int Add(int num1,int num2){
while(num2!=0){
int temp=num1^num2;
num2=(num1&num2)<<1;
num1=temp;
}
return num1;
}
}
思路:1.计算a和b的无进位,和进位
2.如果进位不为0,则说明a+b的结果等于无进位和+进位,此时,把无进位和作为a,进位作为b,继续计算
3.如果进位等于0,说明此时a+b的结果就等于无进位和,返回无进位和即可。
2.把字符串转换成整数
public class Solution{
public int StrToInt(String str){
if(str==null||str.length()==0) return 0;
int mark=0;
int number=0;
if(str.charAt(0)=='-') mark=1;
for(int i=mark;i<str.length();i++){
if(str.charAt(i)=='+'){
continue;
}
if(str.charAt(i)<48||str.charAt(i)>57){
return 0;
}
number=number*10+str.charAt(i)-48;
}
return mark==0?number:-number;
}
}
思路:难点是在于边界的考察
1.先用int来存储(用整型来存储)
2.遍历字符串,在判断,如果索引处的字符等于+,就继续遍历。
3.然后判断边界,数字在0-9之间,就相当于ASCII值得48-57之间。
4.最后把ASCII转换成数字,转换公式:i=i*10+C[i]-48;
5.最后返回。
3.剪绳子
public class Solution{
public int cutRope(int target){
if(target<=1){
return 0;
}
if(target==2){
return 1;
}
if(target==3){
return 2;
}
int length=target%3==0?target/3:target/3+1;
int length2=3-target%3;
int result=1;
for(int i=0;i<length;i++){
result=result*(i<length-length2?3:2);
}
return result;
}
}
解题思路:找出最优解的规律
当target等于1,2,3的时候,结果是固定的。
当target大于3的时候,可以看以下数据
target=4,最优解:2,2
target=5,最优解:3,2
target=6,最优解:3,3
target=7,最优解:3,2,2
target=8,最优解:3,3,2
target=9,最优解:3,3,3
target=10,最优解:3,3,2,2
target=11,最优解:3,3,3,2
target=12,最优解:3,3,3,3
target=13,最优解:3,3,3,2,2
target=14,最优解:3,3,3,3,2
target=15,最优解:3,3,3,3,3