【牛客 - 剑指offer】JZ64 求1+2+3+...+n 与运算的短路操作 Java实现


剑指offer题解汇总

https://blog.csdn.net/guliguliguliguli/article/details/126089434

题目链接

知识分类篇 - 位运算 JZ64 求1+2+3+…+n

题目

在这里插入图片描述

思路

计算机的数字由二进制表示,我们平常的运算是对整个数字进行运算,但是还可以按照二进制的每一位分别进行运算。常见运算有位与、位或、移位、位异或等。

都是二进制的情况下:
按位与:都是1的时候,位与结果为1,其余结果为0
按位或:只要有一个是1,位或结果就是1
按位异或:相同的时候是0,不相同的时候是1
向右移位 >>:右移多少位相当于乘以2的多少次方
向左移位 <<:左移多少位相当于除以2的多少次方(不要余数)
无符号右移 >>>:不管是正数还是负数,都是前补0。这里以-5为例子进行讲解,通过无符号右移,负数变正数
在这里插入图片描述
题目中要求:不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)

不能使用循环,只能一个一个加了,可以使用递归的方式。写递归最重要的就是递归的终止条件。可以采用与运算短路操作: 在函数中,如果与运算成立,则继续,否则终止函数直接返回false。

下面这两段段代码表达的意思是一样的,不过因为题目不能使用if来判断,就需要使用&&运算符。只有n>=1成立的时候,&&运算符后面的代码才会被执行,否则,直接就会返回false,直接忽略&&之后的一切内容。这种方式也被称为与运算的短路操作

(n > 1) && (n = n + Sum_Solution(n - 1)) > 0
if (n > 1) {
    n += Sum_Solution(n - 1);
}
return 1;

代码

import java.util.*;

public class Solution {
    public int Sum_Solution(int n) {
        boolean b = ((n > 1) && (n = n + Sum_Solution(n - 1)) > 0);
        return n;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值