面试题.64 LeetCode题目 “求1 +2 +...+n”

面试小白的我深深地发出了疑问,面试的时候真的会有这样的题吗…

题目描述

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

示例 1:
输入: n = 3
输出: 6

示例 2:

输入: n = 9
输出: 45

限制:
1 <= n <= 10000

解题思路

1. 等差数列求和

首先可以想到利用n * (n + 1) / 2的递归公式进行求解,然而本题不让使用乘除法,此方法暂不考虑。

2. 利用递归求解

利用递归时需要判断跳出递归的条件,本题不让用if、for等常用的语句,因此我们需要另想办法。
本题要求当n递减到0时跳出循环,因此可用n != 0进行判断,再利用逻辑运算符&&,通过短路效应使循环跳出。

具体思路可参考代码及注释。

完整代码

  1. 等差数列求和(不满足题意)
class Solution {
public:
    int sumNums(int n) {
      //等差数列求和
      return n*(n+1)/2;
    }
};
  1. 利用递归求解(通过测试)
class Solution {
public:
    int sumNums(int n) {
      // 如果n为0,则跳出递归循环,不会再继续执行。
      n != 0 && (n += sumNums(n-1));
      return n;
    }
};

性能结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39856931/article/details/106489403