⭐️前面的话⭐️
大家好!本篇文章将介绍的剑指offerOJ题,来自力扣剑指 Offer 64. 求1+2+…+n题解,这道题乍一看很简单,但是不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)使这道题难度上了好几个台阶,本文将使用逻辑运算符短路来模拟构造判断语句,以递归的形式解决这道题,展示代码语言暂时为:Java,C,C++。
📒博客主页:未见花闻的博客主页
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📌本文由未见花闻原创,CSDN首发!
📆首发时间:🌴2021年12月13日🌴
✉️坚持和努力一定能换来诗与远方!
💭刷题推荐书籍:📚《剑指offer专项版》,📚《剑指offer第2版》
💬参考在线编程网站:🌐牛客网🌐力扣
博主的码云gitee,平常博主写的程序代码都在里面。
博主的github,平常博主写的程序代码都在里面。
🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!
📌导航小助手📌
- ⭐️剑指 Offer 64. 求1+2+…+n⭐️
- 🔐题目详情
- 💡解题思路
- 🔑源代码
- 🌱总结
⭐️剑指 Offer 64. 求1+2+…+n⭐️
🔐题目详情
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例:
输入: n = 3
输出: 6
输入: n = 9
输出: 45
来源:力扣(LeetCode)链接:剑指 Offer 64. 求1+2+…+n |
---|
💡解题思路
方法1:它说不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)你就不用?
方法2:递归,利用逻辑运算符&&
||
短路原理,构造判断语句,进行递归条件判断,实现递归。
逻辑与
&
&
\&\&
&&短路原理:
布
尔
表
达
式
1
&
&
布
尔
表
达
式
2
布尔表达式1\ \&\& \ 布尔表达式2
布尔表达式1 && 布尔表达式2
如果布尔表达式1
为假,布尔表达式2
将不会被执行,反之,布尔表达式1
为真,布尔表达式2
将会被执行。
相当于:
if (布尔表达式1) {
布尔表达式2;
}
逻辑或
∣
∣
||
∣∣短路原理:
布
尔
表
达
式
1
∣
∣
布
尔
表
达
式
2
布尔表达式1\ || \ 布尔表达式2
布尔表达式1 ∣∣ 布尔表达式2
如果布尔表达式1
为真,布尔表达式2
将不会被执行,反之,布尔表达式1
为假,布尔表达式2
将会被执行。
相当于:
if (!布尔表达式1) {
布尔表达式2;
}
🔑源代码
方法2:Java
class Solution {
public int sumNums(int n) {
boolean is = n > 1 && (n += sumNums(n -1)) > 1;
return n;
}
}
方法2:C
int sumNums(int n){
n && (n += sumNums(n-1));
return n;
}
方法2:C++
class Solution {
public:
int sumNums(int n) {
n && (n += sumNums(n-1));
return n;
}
};
🌱总结
像这种限制一个条件,让简单题变复杂这种类型的题目有很多,除了这个比较常见的有:
- 不用加减乘除做加减法。
- 不用乘法做乘法。
- 不用乘除模运算做除法。
- 不用判断和比较运算符求最大值。
还有很多很多,不一一列举了,遇到这种问题需要从语言的一些常见底层逻辑出发,比如位运算,逻辑符短路,递归,快速幂等,甚至需要考虑加减乘除模等数学运算符的特性与联系,才能将一道简单题以复杂的方式做出来。
常见题如下:
371. 两整数之和
面试题 17.01. 不用加号的加法
剑指 Offer 65. 不用加减乘除做加法
面试题 08.05. 递归乘法
29. 两数相除
50. Pow(x, n)
69. Sqrt(x)
面试题 16.07. 最大数值