求1+2+3+...+n(C++)

求1+2+3+...+n(C++),第1张

求1+2+3+…+n 描述

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

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

示例1
输入:
5
返回值:
15
示例2
输入:
1
返回值:
1
思路/解法 方式一

不能使用循环,则可以使用递归,那么关键在于如何终止递归,即到0时终止递归,此时我们可以使用&&的短路逻辑进行终止递归。

class Solution {
public:
    int Sum_Solution(int n) {
        //使用&&的短路逻辑,因为x&&y,如果x为false或者0时,那么会直接调用当前逻辑,即y不会执行
        n && (n += Sum_Solution(n -1));
        return n;
    }
};
方式二

根据数学知识,该题的求和公式为n*(n+1)/2,那么我们这个过程中无法使用乘法和除法,即我们可以使用内存空间(字符数组,只占一个字节)来表示我们的乘法所占空间,即如果n为5,那么我们开辟char res[n][n+1]的空间,那么对该空间sizeof(res)为30,再将其右移1位,即可得到求和大小。

class Solution {
public:
    int Sum_Solution(int n) {
        char res[n][n+1];
        return sizeof(res) >> 1;
    }
};

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1324166.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)

    保存