数学的题(2021-7-19)

这篇博客介绍了如何使用位运算实现加法,字符串转换整数的算法,并探讨了剪绳子问题的最优解策略。通过位运算,实现了加法的高效计算;在字符串转整数的过程中,注意边界条件和ASCII码转换;剪绳子问题中,通过观察找到规律,确定最优解。这些算法展示了位操作在解决问题上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;//用int来存储,以防止越界,用整型来存储
      if(str.charAt(0)=='-')  mark=1;//charAt:返回指定索引处的字符等于-
      for(int i=mark;i<str.length();i++){//遍历字符串
            if(str.charAt(i)=='+'){//如果索引处的字符等于+,则继续遍历
               continue;
            }
            if(str.charAt(i)<48||str.charAt(i)>57){//ASCII码,字符0对应48,9对应57,不在范围内返回false
            return 0;
            }
            number=number*10+str.charAt(i)-48;//返回的结果要把ASCII转换成数字,转换公式:i=i*10+C[i]-48;
      }
      return mark==0?number:-number;//number等于0,返回number,mark=1,返回一个-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;
      //数字后面2的个数
      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等于12,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值