Leetcode 剑指Offer

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

示例 1:

输入: n = 3
输出: 6

示例 2:

输入: n = 9
输出: 45

一、信息

1.求一个等差数列的求和

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

二、分析

1.如果没有这些限制只需要循环然后++就行了,面对如此离谱的要求该怎么办呢?

我的思路:

思路1:数学法,直接用等差数列求和公式直接解决过程中只需要输入输出即可简单快捷。让我检查一下满不满足,我测不满足有应为不能出现乘除号,好的这条路走不通

思路2:递归。

我的答案:

这个问题是一个经典的数学问题,通常可以使用公式 `n(n+1)/2` 直接解决。但由于题目限制了我们不能使用乘除和条件判断等,我们需要考虑其他方法。我们可以使用递归的方法,并利用逻辑运算符来实现递归的终止条件,避免使用禁止的关键字。

下面是各种语言的实现:

### C语言

int sumNums(int n){n && (n += sumNums(n - 1));return n;
}

### C++

int sumNums(int n) {n && (n += sumNums(n - 1));return n;
}

### Java

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

### 思考过程和分析过程

1. **思考过程**

   - 首先,我们明确不能使用常规的循环和条件语句来解决这个问题。
   - 接着,我们考虑可以使用什么方法来代替这些操作。递归是一个很好的选择,因为它可以帮助我们完成迭代的过程。
   - 然后,我们需要一个终止条件来结束递归。由于不能使用常规的条件语句,我们可以使用逻辑运算符来实现这一点。

2. **分析过程**

   - 我们设置递归函数 `sumNums(n)`,其功能是计算从 1 到 n 的和。
   - 使用逻辑运算符 `&&` 来设置终止条件。在 `n && (n += sumNums(n - 1))` 这段代码中,如果 n 为 0,则后面的递归调用不会执行,实现了递归的终止。
   - 通过递归调用,我们能够逐步累加从 n 到 1 的所有数。

3. **时间复杂度和空间复杂度**
   - 时间复杂度:O(n),因为我们进行了 n 次递归调用。
   - 空间复杂度:O(n),递归调用会使用栈空间,最深达到 n 层。

通过这种方法,我们可以在满足题目限制的情况下求解这个问题。

英雄师傅答案:

int sumNums(int n){int sum=0;n&&(sum=n+sumNums(n-1));return sum;
}

总结:

学到什么?

从这个题目中,我们可以学习到以下几点:

1. **递归的使用和理解**:递归是计算机科学中一个重要的概念。这个题目提供了一个很好的机会来理解和练习如何使用递归来解决问题。

2. **条件语句的替代方案**:由于我们不能使用常见的条件语句,我们需要找到其他方法来实现条件检查。这可以帮助我们更好地理解条件语句的工作原理,并学习如何使用逻辑运算符作为条件语句的替代方案。

3. **逻辑运算符的短路行为**:逻辑运算符(如 `&&` 和 `||`)具有短路行为,这意味着如果第一个操作数能够确定整个表达式的值,那么第二个操作数将不会被评估。我们可以利用这一特性来创建条件语句的替代方案。

4. **创新思维和问题解决能力**:由于题目的特殊要求,我们需要跳出常规的思维模式,尝试新的方法来解决问题。这可以帮助我们培养创新思维和问题解决能力。

5. **代码简化和优化**:在特定的条件下(如本题的限制),我们可以探索如何通过简化和优化代码来满足条件,这也是一种对代码优化的练习。

6. **深入理解编程语言的特性**:通过这种非常规的练习,我们可以更深入地理解编程语言的特性和工作原理。

7. **数学知识的应用**:虽然题目禁止我们直接使用数学公式,但我们仍然需要基本的数学知识来理解和解决问题。

8. **细节处理**:在实现递归函数时,我们需要注意处理边界条件和特殊情况,这可以帮助我们提高对细节的关注和处理能力。

综上所述,这个题目可以作为一个很好的机会来练习和加深我们对编程和算法设计的理解和技能。

 思维和方法:

这个题目还能让我们学到如下一些思维和方法:

1. **递归思维**:学会运用递归思维解决问题,这不仅仅限于编程,也可以应用于其他需要分层处理或分步解决的问题场景。

2. **位运算和逻辑运算的灵活应用**:学习如何利用位运算和逻辑运算来实现复杂的条件控制,是提升编程技能的一个方向。

3. **“约束性创新”思维**:有时候,在一些特定的约束条件下进行问题解决,可以激发出非常有创意的解决方案,这是一种“约束性创新”思维。

4. **反向思维**:在不能使用常规方法的情况下,尝试使用反向思维来找到解决问题的新路径,这也是一种非常有价值的思维训练。

5. **函数式编程思维**:虽然这个题目不是典型的函数式编程问题,但是通过递归,我们可以体验到一些函数式编程的思想,比如避免使用循环和条件语句,使用函数来表达复杂逻辑等。

6. **测试驱动开发(TDD)**:由于题目的特殊性,我们需要非常仔细地考虑边界条件和特殊情况,这是测试驱动开发的一个重要方面。

7. **算法优化和性能分析**:通过这种题目,我们可以学习到如何对算法进行优化,以及如何分析算法的时间和空间性能。

8. **探索和实验**:这种题目鼓励我们进行探索和实验,尝试不同的方法和技术来找到最佳的解决方案。

9. **问题分解和抽象**:学会将大问题分解成小问题,并通过抽象来简化问题,是解决复杂问题的一种有效方法。

通过这个题目,我们可以培养这些有价值的思维和方法,这不仅可以帮助我们更好地解决编程问题,也可以提升我们的整体思维能力和问题解决能力。

思想:

这个题目还能启发我们在解决问题时采纳以下一些重要思想:

1. **灵活性思想**:即便是在一系列的限制之下,我们仍然可以找到问题的解决方法。这种灵活性的思维方式可以应用于生活和工作的各个方面。

2. **简化复杂性**:通过将问题分解为更小的部分(例如使用递归来简化问题),我们可以更容易地解决复杂问题。这是一种重要的思维方式,可以帮助我们在面对复杂问题时保持清晰的头脑。

3. **持续学习和适应性**:这个题目可以看作是一种学习新技术和策略的机会,它鼓励我们不断学习和适应新的方法和技术,以更好地解决问题。

4. **挑战传统思维**:这个题目挑战了我们对于常规编程范式的理解(例如使用循环和条件语句来解决问题),这可以帮助我们打破传统的思维模式,寻找新的解决方案。

5. **创意和创新**:这个题目鼓励我们思考新的、创意的解决方案。这是一种鼓励创新和创意思维的好方法。

6. **批判性思维**:这个题目要求我们仔细考虑我们的解决方案和方法,以确保它们满足所有的条件和限制。这是一种培养批判性思维的好机会。

7. **解决实际问题的能力**:虽然这个题目是一个编程练习,但它也可以看作是一个模拟实际问题的例子。通过解决这样的问题,我们可以培养我们的实际问题解决能力。

8. **耐心和坚持**:由于这个题目的特殊性和难度,解决它需要一定的耐心和坚持。这是一个培养我们耐心和坚持的好机会。

综上所述,这个题目可以启发我们在解决问题时采纳一系列有价值的思想和策略,这些思想和策略不仅适用于编程,也可以应用于我们的日常生活和工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/133926.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lua环境搭建数据类型

lua作为一门计算机语言,从语法角度个人感觉还是挺简洁的接下来我们从0开始学习lua语言。 1.首先我们需要下载lua开发工具包 在这里我们使用的工具是luadist 下载链接为:https://luadist.org/repository/下载后的压缩包解压后就能用。 2.接下来就是老生…

ARM 相关概念2

一、汇编中三种符号(汇编指令、伪指令、伪操作) 二、汇编基本格式 三、数据操作指令 3.1 数据搬移指令mov/mvn ① 示例 ② 立即数 0xff000000 >判断的数 1111 1111 0000 0000 0000 0000 0000 0000 >判断的数 0000 0000 0000 0000 0000 0000 1111…

企业架构LNMP学习笔记51

企业案例使用: 主从模式: 缓存集群结构示意图: 去实现Redis的业务分离: 读的请求分配到从服务器上,写的请求分配到主服务器上。 Redis是没有中间件来进行分离的。 是通过业务代码直接来进行读写分离。 准备两台虚…

华为云云耀云服务器L实例评测|部署前后端分离项目

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 学习测评 ✨特色专栏: MyS…

2022年全国研究生数学建模竞赛华为杯D题PISA架构芯片资源排布问题求解全过程文档及程序

2022年全国研究生数学建模竞赛华为杯 D题 PISA架构芯片资源排布问题 原题再现: 一、背景介绍 芯片是电子行业的基础,在当前日益复杂的国际形势下,芯片成了各个大国必争的高科技技术。本课题关注网络通信领域的交换芯片,传统的交…

Python爬虫逆向猿人学刷题系列——第七题

题目:采集这5页中胜点列的数据,找出胜点最高的召唤师,将召唤师姓名填入答案中 地址:https://match.yuanrenxue.cn/match/7 本题主要是考察字体的动态变化,同样也是从字体文件下手构造出映射关系就好,但本题…

TuyaOS开发学习笔记(2)——NB-IoT开发SDK架构、运行流程

一、SDK架构 1.1 架构框图 基于 TuyaOS 系统,可以裁剪得到的适用于 NB-IoT 协议产品接入的 SDK。SDK 将设备配网、上下行数据通信、产测授权、固件 OTA 升级等接口进行封装,并提供相关函数。 1.2 目录结构 1.2.1 TuyaOS目录说明 adapter:T…

70、Spring Data JPA 的 自定义查询(全手动,自己写完整 SQL 语句)

1、方法名关键字查询(全自动,既不需要提供sql语句,也不需要提供方法体) 2、Query查询(半自动:提供 SQL 或 JPQL 查询) 3、自定义查询(全手动) ★ 自定义查询&#xff08…

范文展示,如何三步写出一篇满意的论文

第一步:输入文章关键信息 文章标题,写论文的话即为拟定的论文标题,例如这篇范文中的题目为“阳明心学研究” 关键词,可以写出多个论文主题相关的关键词,用逗号分开,例如这篇范文中只写了一个关键词“王阳…

9.12 C++作业

实现一个图形类(Shape),包含受保护成员属性:周长、面积, 公共成员函数:特殊成员函数书写 定义一个圆形类(Circle),继承自图形类,包含私有属性:半…

长城网络靶场第三题

关卡描述:1.oa服务器的内网ip是多少? 先进行ip统计,开始逐渐查看前面几个ip 基本上都是b/s,所以大概率是http,过滤一下ip 第一个ip好像和oa没啥关系 第二个ip一点开就是 oa,应该就是他了。 关卡描述&a…

指针-子串逆置

任务描述 从标准输入上读入以空格分隔的字符串 s 和 t,将 s 中与 t 匹配的所有子串逆置后再输出 s,当 s 中无与 t 匹配的子串时直接输出字符串 s。已经匹配的字符不会再重复匹配。 相关知识 参考之前的关卡。 编程要求 根据提示,在右侧编…

Golang编写自定义IP限流中间件

目录 基于令牌桶的限流算法实现高并发限流(使用golang官方限流器)Go代码测试记录ab -t 1 -c 1 http://127.0.0.1:8080/api/resource结果预测:1秒内最多生成10个令牌,而总共有20个串行的请求,结果应该是1个成功&#xf…

CentOS 7.6使用mysql-8.0.31-1.el7.x86_64.rpm-bundle.tar安装Mysql 8.0

https://downloads.mysql.com/archives/community/是社区版的官网,可以选择版本下载。 cat /etc/redhat-release可以看到系统版本是CentOS Linux release 7.6.1810 (Core),uname -r可以看到版本是3.10.0-957.el7.x86_64。 yum remove -y mysql-libs把…

来看看Python MetaClass元类详解

MetaClass元类,本质也是一个类,但和普通类的用法不同,它可以对类内部的定义(包括类属性和类方法)进行动态的修改。可以这么说,使用元类的主要目的就是为了实现在创建类时,能够动态地改变类中定义…

Python3.10 IDLE更换主题

前言 自定义主题网上有很多,3.10IDLE的UI有一些新的东西,直接扣过来会有些地方覆盖不到,需要自己测试着添几行配置,以下做个记录。 配置文件路径 Python安装目录下的Lib\idlelib\config-highlight.def。如果是默认安装&#xf…

轻松鲨-AI文案写作 人工智能聊天

轻松鲨AI助手使用地址:http://www.qingsongsha.com?utm_sourcenavigation_website 或前往苹果App Store下载“轻松鲨APP” 支持AI连续对话聊天,帮你解答各种疑问... 让AI帮你画思维导图写文案,提升工作效率... 内置多场景专业模板&#xff0…

解决 tesserocr报错 Failed to init API, possibly an invalid tessdata path : ./

问题描述 我们在初次使用tesserocr库的时候,可能会报以下错误: RuntimeError: Failed to init API, possibly an invalid tessdata path: ./ 这是因为我们在使用 conda 创建的环境中找不到"tessdata"这个文件夹。 解决办法 这时候把Tessera…

品牌是什么?品牌加分秘笈曝光

作为一个多年的品牌人,这几年,历经迷惘和探索,迷惘在于: 1.品牌部是花钱部门,不直接创造营收,不受老板重视、钱少。 2.品牌作业难以衡量,一般以曝光、阅读、声量指数等指标来衡量,…

026-从零搭建微服务-文件服务(二)

写在最前 如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 源码地址(后端):https://gitee.com/csps/mingyue 源码地址(前端):https://gitee.com/csps…