LeetCode 求1 + 2 + ... + n

求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

示例 1:

输入: n = 3
输出: 6
示例 2:

输入: n = 9
输出: 45

限制:

1 <= n <= 10000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/qiu-12n-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

如果题目没有任何的限制的话,那么就会有3中方式:
方式一:
利用乘除法进行求解,但是明确要求不可以使用乘除法,所以排除

public int sumNums(int n){
      return n * (n + 1) / 2; //利用数学公式进行求解
}

方式二:
既然不可以使用乘除法,那么就只能使用加法,要使用加法,就需要利用循环或者递归。但是循环或者递归,必然需要使用到if来进行判断,但是题目已经明确要求不可以使用if语句,所以排除

public int sumNums(int n){
     if(n == 1) 
        return 1;
     return n + sumNums(n - 1);
}

正确的解法
既然不可以使用if来判断,那么利用递归的时候,如何让程序结束递归呢?
其实我们可以利用与运算,当n大于1的时候,那么就进入递归,返回值是一个boolean类型的值。
对应的代码:

class Solution {
    int res = 0;
    public int sumNums(int n) {
    /*
    模拟if语句,进行判断n是否大于1,如果大于1,就进入递归,而这个x并没有
    任何的作用,但由于是一个模拟的是一个if语句,那么对应的值是一个boolean
    类型的值,否则,如果x定义是其它类型的,就需要使用A > B ? A : B,三目运
    算符,但是题目也已经明确要求不可以使用这个运算符,所以最好的方式就是将
    x定义为boolean类型.
    */
         boolean x = n > 1 && sumNums(n - 1) > 0; 
         res += n;
         return res;
    }
}

运行结果:
在这里插入图片描述

LeetCode 不用加减乘除进行加法

写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。

示例:
输入: a = 1, b = 1
输出: 2

提示:
a, b 均可能是负数或 0
结果不会溢出 32 位整数

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/bu-yong-jia-jian-cheng-chu-zuo-jia-fa-lcof

不用加减乘除法进行加法,那么我们可以利用逻辑运算符进行运算了。
学习过数字逻辑电路这门课中就有说到半加器之类的,半加器就是运用到的就是逻辑运算符。两个数相加,那么本位和就是两个数字进行异或,产生的进位就是两者进行与运算。
请看下面的例子及过程分析:
在这里插入图片描述

对应的代码:

class Solution {
    public int add(int a, int b) {
         while(b != 0){
              int c = (a & b) << 1;//当前数字相加之后产生的进位,由于需要进行下一次的相加,所以还需要左移一位
              a ^= b;//非进位和
              b = c;
         }
         return a;
    }
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值