剑指offer64.求1+2+...+n

news/2024/12/13 1:53:25/

看到题脑子里就有了想法,这还不简单,直接用递归啊,return一个n+sumNums(n-1)写完之后发现到了0你得终止但是不能用if等语句你没办法终止,想了大概十分钟放弃了,这没办法终止啊,然后看了题解。

class Solution {public int sumNums(int n) {boolean flag = n > 0 && (n = sumNums(n-1) + n) > 0;return n;}
}

 解题的关键就在于当判断A&&B的时候,如果A是false,那么A&&B就确定为false就不会执行B,如果A||B,A确定是true,那么就确定A||B是true,那么就不会执行B。所以题解中当n=0的时候就不会继续递归了,最终返回的就是1+2+..+n了。题解还用了一种位运算的方法。

1+2+...+n=n(n+1)/2,除以2可以通过右移一位获得,n(n+1)可以通过俄罗斯农民乘法获得。

俄罗斯农民乘法是一种将数字转成二进制后,通过位移操作,最后将乘法转换成加法的高效算法. 原理是将被乘数除以2, 乘数乘以2, 如果被乘数除以2以后有余数 (余数为1), 则将乘数累加到结果中. 以25*20为例: 25的二进制是11001,20的二进制是10100,将20左移一位得到101000,将25右移一位得到1100,再左移一位得到11000,此时25为1,累加20,结果为11000+20=11020。但是不能用for循环,根据数据大小是1-10000,二进制展开最多14位,于是手动展开。

class Solution {public int sumNums(int n) {int ans = 0, A = n, B = n + 1;boolean flag;flag = ((B & 1) > 0) && (ans += A) > 0;A <<= 1;B >>= 1;flag = ((B & 1) > 0) && (ans += A) > 0;A <<= 1;B >>= 1;flag = ((B & 1) > 0) && (ans += A) > 0;A <<= 1;B >>= 1;flag = ((B & 1) > 0) && (ans += A) > 0;A <<= 1;B >>= 1;flag = ((B & 1) > 0) && (ans += A) > 0;A <<= 1;B >>= 1;flag = ((B & 1) > 0) && (ans += A) > 0;A <<= 1;B >>= 1;flag = ((B & 1) > 0) && (ans += A) > 0;A <<= 1;B >>= 1;flag = ((B & 1) > 0) && (ans += A) > 0;A <<= 1;B >>= 1;flag = ((B & 1) > 0) && (ans += A) > 0;A <<= 1;B >>= 1;flag = ((B & 1) > 0) && (ans += A) > 0;A <<= 1;B >>= 1;flag = ((B & 1) > 0) && (ans += A) > 0;A <<= 1;B >>= 1;flag = ((B & 1) > 0) && (ans += A) > 0;A <<= 1;B >>= 1;flag = ((B & 1) > 0) && (ans += A) > 0;A <<= 1;B >>= 1;flag = ((B & 1) > 0) && (ans += A) > 0;A <<= 1;B >>= 1;return ans >> 1;}
}


http://www.ppmy.cn/news/843240.html

相关文章

hpml350服务器安装系统,安装HP ML350

无声卡&#xff0c;显卡是集成ATI ES1000做为台式机&#xff0c;噪音大了不行&#xff0c;试了一下新机器&#xff0c;感觉声音还是可以接受的&#xff0c;甚至比一些组装的台式机还要小。于是决定就用它了。 想安装新的声卡和显卡&#xff0c;打开机箱一看&#xff0c;哇&…

关于根据文件名以及内容查找文件存放路径

1 根据文件名字查找文件存放路径 1.1 命令如下&#xff08;先切换到存放该文件的顶级父目录下&#xff09;&#xff1a; find /path/to/search -name "filename"​​ 1.2 案例如下 2 根据内容查找包含该内容的文件存放路径 2.1 命令如下&#xff08;先切换到存放该文…

自然语言处理从入门到应用——LangChain:代理(Agents)-[代理类型]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 代理使用LLM来确定应采取哪些操作以及以何顺序执行这些操作。动作可能是使用工具并观察其输出&#xff0c;或向用户返回响应。以下是LangChain中可用的代理&#xff1a; zero-shot-react-description 此代理使用ReAc…

【微机原理与接口技术】多功能可编程芯片 与 多功能电饭煲

多功能可编程芯片&#xff0c;就像你的多功能电饭煲&#xff0c;你点了不同的按键&#xff0c;就启动了不同的工作方式&#xff0c;是熬粥还是做米饭&#xff0c;之后你又得选择压力和时间。 而在芯片上&#xff0c;你得先设置控制字&#xff0c;也就是 先选择工作方式&#…

推荐一个220V控制12V的电路板继电器-220v降压控制继电器

220v转12v继电器产品性能&#xff1a; 1.宽输入电压 45v-265v 2.效率高&#xff0c;稳压输出&#xff0c;低纹波噪声 3.输出电压精度3% 4.具有输出过流 短路等保护功能 5.6级效能等级 6.sop8封装 220v降压控制继电器 220v to 12v relay Product performance: 1. Wide input vol…

电器“服务”焕新生活?香!香!香!

你把手机拿去申请价保&#xff0c;我把电脑拿去以旧换新&#xff0c;他将用了小半年坏了的电饭煲拿去售后直接换了一台新的…… 本以为是经济压力大&#xff0c;大家都勒紧裤腰带了&#xff0c;用完才发现 这些服务是真的香。肉眼可见&#xff0c;当下的我们已经不再沉迷于单纯…

python的主要应用于电子电器类_MicroPython技术及应用前景

1 Micropython技术是什么&#xff1f;python MicroPython极精简高效的实现了Python3语言。它包含Python标准库的一小部分&#xff0c;能在单片机和受限环境中运行。编程 1.1 MicroPython发展网络 由剑桥大学的理论物理学家乔治.达明设计&#xff0c;遵循MIT许可协议&#xff0c…

彻底解决IDEA输出中文乱码问题

本文一共有3种方法&#xff0c;针对的情况是输出中文乱码问题 问题描述 无法正确输出中文字符&#xff1a;&#xff08;请正确分辨自己是哪一种乱码问题&#xff01;&#xff09; 解决方法 1、最容易想到 File -> Settings -> File Encodings下设置编码格式为UTF-8…