IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【JZ64 求1+2+3+...+n】 -> 正文阅读

[数据结构与算法]【JZ64 求1+2+3+...+n】

描述

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

数据范围: 0 < n ≤ 200
进阶: 空间复杂度 O(1) ,时间复杂度 O(n)

示例1

输入:5

返回值:15

示例2

输入:1

返回值:1

方法:与运算的短路递归(推荐使用)

知识点:位运算

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

具体做法:

从1连加到n,不能使用城乘除法,那就只能相加了。一个一个加,但是循环需要判断什么时候截止,我们又不能用关键词,这就难办了。

如果我们的和加上了 n,则剩余的问题就是该数字加上 1 到 n?1 的和,这是一个子问题,因此可以用递归,从 n回到1,再累加递归的结果。但是我们需要判断递归停止的条件,即到 0 时停止递归,不能用if、switch、?:等操作,我们可以采用与运算的短路操作: 在函数中,如果与运算成立,则继续,否则终止函数直接返回false。

具体做法:

  • step 1:用与运算判断n是否为正数,如果不是则结束递归。
  • step 2:如果是累加子问题的和,并返回n。

图示:
在这里插入图片描述
代码:

class Solution {
public:
    int Sum_Solution(int n) {
        //通过与运算判断n是否为正数,以结束递归
        n && (n += Sum_Solution(n - 1));
        return n;
    }
};

运行时间:3ms
超过31.74% 用C++提交的代码
占用内存:520KB
超过25.37%用C++提交的代码
复杂度分析:
时间复杂度: O(n),一共递归 n次
空间复杂度: O(n),递归栈深度为 n

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 11:44:27  更:2022-05-05 11:49:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:33:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码