LeetCode个人刷题思路整理——面试题64.求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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/qiu-12n-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

一看题目,还以为今天依旧是儿童节,这力扣整啥呢?天上是不会掉馅饼的,面试题也不会真的这样逗人,结果是各种限制,不让循环,不让判断,不让乘除法,真是断人后路呀。
首先不让循环,那么常规的代替循环的就是递归了。很容易实现。

class Solution {
public:
    int sumNums(int n) {
        if(n==1)
            return n;
        int res=n;
        res=n+sumNums(n-1);
        return res;
    }
};

问题是有判断呀?怎么办呢?递归的出口条件为判断n是否为1,连条件判断都不让用,没办法,让你兄弟上了。
C语言基础,&&运算符,以A && B为例,当A不成立时,不会再计算B,直接返回;当A成立时,继续判断B是否成立。
将上述递归中的条件当做A,当n1不成立时,继续递归,当n1成立,返回1。同理利用 || 也可以实现。

class Solution {
public:
    int sumNums(int n) {
        //递归&&
        //n && (n+=sumNums(n-1));
        //递归||
        //(n==1) || (n+=sumNums(n-1));
        return n;
    }
};

官方还有给出快速乘的解法,有兴趣的童鞋可以去看一看也很有意思,时间关系就不在这里整理啦啦。(实验室码文字中途来CSDN哈哈哈)

你可能感兴趣的:(LeetCode个人刷题思路整理——面试题64.求1+2+……+n)