LeetCode C++ 剑指 Offer 64. 求1+2+…+n【Bit Manipulation】中等
发布日期:2021-07-01 02:58:19 浏览次数:3 分类:技术文章

本文共 657 字,大约阅读时间需要 2 分钟。

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

示例 1:

输入: n = 3输出: 6

示例 2:

输入: n = 9输出: 45

限制: 1 <= n <= 10000


解法1 直接乘除

class Solution {
public: int sumNums(int n) {
return n * (n + 1) / 2; }};

运行效率如下:

执行用时:4 ms, 在所有 C++ 提交中击败了30.48% 的用户内存消耗:6.2 MB, 在所有 C++ 提交中击败了37.91% 的用户

解法2 快速乘和右移

class Solution {
public: int sumNums(int n) {
//乘法改为快速乘函数,除法换为>>1 int a = n, b = n + 1, ans = 0; while (b) {
if (b & 1) ans += a; a <<= 1; b >>= 1; } return ans >> 1; }};

运行效率如下:

执行用时:4 ms, 在所有 C++ 提交中击败了30.48% 的用户内存消耗:6.3 MB, 在所有 C++ 提交中击败了28.12% 的用户

转载地址:https://memcpy0.blog.csdn.net/article/details/111399616 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:LeetCode C++ 1426. Counting Elements【Array/Hash Table】简单
下一篇:LeetCode C++ 48. Rotate Image【Array】中等

发表评论

最新留言

很好
[***.229.124.182]2024年05月07日 23时46分33秒