剑指 Offer 64. 求1+2+…+n
利用条件运算的短路性质中止递归
题目链接-来源:力扣(LeetCode)
求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
示例
输入: n = 3
输出: 6 1:
思路:
首先不能使用循环语句的话,无法通过迭代操作计算;乘除法也封死了我们套公式的捷径。
考虑递归,但递归需要终止条件,但我们无法使用条件语句,似乎到这里也堵死了。
考虑条件运算的性质,有一条「短路」特性:当 与运算符「&&」的左表达式结果为 false,则右侧的表达式不会被执行;同理,当 或运算符「||」的左表达式结果为 true,则右侧表达式同样不会被执行。
于是我们只要想办法将递归的终止条件放在 条件运算符 的左侧,而递归语句放在右侧,当终止条件不满足时,递归语句被执行;满足终止条件时,条件运算会自动跳出,跳过递归语句,执行初始化语句。
条件运算符可以选用「||」,则左侧放置 「递归终止条件」;也可以选用「&&」,则左侧放置「递归终止条件的否定」。
时间复杂度:O(n)
空间复杂度:O(n)
实现:
1 | class Solution { |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.