尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

剑指offer-47、求1+2+3...+n

剑指offer-47、求1+2+3...+n
📅 发布时间:2026/6/20 21:09:45

题⽬描述

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

示例
输⼊:5
输出:15

思路及解答

用for循环

这个问题,如果直接使⽤ for 循环,超级简单,重拳出击,时间复杂度为 O(n) 。代码如下:

public class Solution {public int Sum_Solution(int n) {int sum = 0;for (int i = 1; i <= n; i++) {sum += i;}return sum;}
}

可是上⾯的明显违反了使⽤for 循环的原则

乘除法

试试公式法, 1+2+3+...+(n-1)+n = n * (n+1)/2 ,

public class Solution {public int Sum_Solution(int n) {if (n >= 0) {return n * (n + 1) / 2;}return 0;}
}

但是上⾯的做法,同样是使⽤乘法,也违反了原则,那么要不使⽤循环,也不适⽤乘法,怎么做呢?

递归

递归可以模拟出循环,⼏乎所有的for 循环操作,都可以以递归的⽅式实现。每⼀次递归,我们让n 减少1 ,直到减少为0 。

public class Solution {public int Sum_Solution(int n) {if (n >= 0) {return n + Sum_Solution(n - 1);}return 0;}
}
  • 时间复杂度为O(n)
  • 空间复杂度也是O(n)

位运算乘法

位运算乘法法:通过位运算实现乘法操作

思路:将n(n+1)用位运算实现,然后右移1位代替除以2

public class Solution {public int sum(int n) {// 计算n*(n+1) using bit manipulationint result = multiply(n, n + 1);// 右移1位相当于除以2return result >> 1;}/*** 位运算实现乘法:利用俄罗斯农民算法* 原理:a * b = (a << i)的和,其中i对应b中为1的位*/private int multiply(int a, int b) {int result = 0;// 当a不为0时继续循环while (a != 0) {// 如果a的最低位是1,则加上对应的b值if ((a & 1) != 0) {result += b;}// a右移1位,b左移1位a >>= 1;b <<= 1;}return result;}// 无循环的位运算乘法版本(符合要求)public int sumNoLoop(int n) {int res = multi(n, n + 1);return res >> 1;}private int multi(int a, int b) {int res = 0;// 通过多个位判断代替循环res += ((a & 1) == 1) ? b : 0;a >>= 1;b <<= 1;res += ((a & 1) == 1) ? b : 0;a >>= 1; b <<= 1;// 继续处理更多位...(根据n的范围确定需要处理的位数)return res;}
}
  • 时间复杂度:O(log n) - 取决于数字的位数
  • 空间复杂度:O(1)

案例解析:

计算 13 × 9:
13 = 1101(二进制)
9 = 1001(二进制)13 × 9 = 13 × (1 + 0 + 0 + 1) 按位展开= (13<<0) + (13<<3) 对应9中为1的位= 13 + 104 = 117

本文来自在线网站:seven的菜鸟成长之路,作者:seven,转载请注明原文链接:www.seven97.top

相关新闻

  • 2025年北京银行灵活贷款服务五大推荐机构排行榜,看哪家口碑
  • 推荐一个html富文本转成unity富文本的js
  • 2025年浙江热镀锌钢格板厂家权威推荐榜单:钢格栅板/常规钢格板/热镀锌钢格板源头厂家精选

最新新闻

  • VScode调试按钮神秘消失?深入剖析C/C++插件IntelliSense Engine与setting.json的同步陷阱
  • 合肥理工学校招生电话多少?2026年6月21号最新发布! - 教育为先
  • 终极智能工具箱:League Akari 重新定义英雄联盟游戏体验
  • 2026年5月美国零售销售月率超预期
  • nuScenes数据集实战指南(一)——环境配置与数据初探
  • 2026合肥十大叛逆戒网瘾学校排名|央视推荐+真实案例,家长必看避坑指南 - 辛云教育资讯

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号