• (其他) 剑指 Offer 64. 求1+2+…+n ——【Leetcode每日一题】


    ❓ 剑指 Offer 64. 求1+2+…+n

    难度:中等

    1+2+...+n ,要求不能使用乘除法forwhileifelseswitchcase关键字及 条件判断语句(A?B:C)。

    示例 1:

    输入: n = 3
    输出: 6

    示例 2:

    输入: n = 9
    输出: 45

    限制

    • 1 <= n <= 10000

    💡思路:

    使用递归解法最重要的是指定返回条件,但是本题无法直接使用 if 语句来指定返回条件。

    条件与 && 具有短路原则,即在第一个条件语句为 false 的情况下不会去执行第二个条件语句

    • 利用这一特性,将递归的返回条件 取非 然后作为 &&第一个条件语句,递归的主体转换为 第二个条件语句
    • 那么当递归的返回条件true 的情况下就不会执行递归的主体部分,递归返回。
      • 本题的递归返回条件n <= 0,取非后就是 n > 0
      • 递归的主体部分sum += Sum_Solution(n - 1),转换为条件语句后就是 (sum += Sum_Solution(n - 1)) > 0

    注意:Java 中,为构成语句,需加一个辅助布尔量 xxx ,否则会报错;

    🍁代码:(C++、Java)

    C++

    class Solution {
    public:
        int sumNums(int n) {
            n && (n += sumNums(n - 1));
            return n;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    Java

    class Solution {
        public int sumNums(int n) {
            boolean flag = (n > 0) && ((n += sumNums(n - 1)) > 0);
            return n;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    🚀 运行结果:

    在这里插入图片描述

    🕔 复杂度分析:
    • 时间复杂度 O ( n ) O(n) O(n),递归函数递归 n 次,每次递归中计算时间复杂度为 O ( 1 ) O(1) O(1),因此总时间复杂度为 O ( n ) O(n) O(n)
    • 空间复杂度 O ( n ) O(n) O(n),递归函数的空间复杂度取决于递归调用栈的深度,这里递归函数调用栈深度为 O ( n ) O(n) O(n),因此空间复杂度为 O ( n ) O(n) O(n)

    题目来源:力扣。

    放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
    关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

    注: 如有不足,欢迎指正!
  • 相关阅读:
    第8章_聚合函数
    使用Kotlin优化Java开发
    [Python] 面向对象(二)
    Android viewpager使用
    面试题------线程池的拒绝策略
    电商类面试问题--01Elasticsearch与Mysql数据同步问题
    springboot和spring使用@Async注意事项
    冰冰学习笔记:二叉搜索树
    CTF靶场搭建及Web赛题制作与终端docker环境部署
    【自学CSS笔记第10篇】——CSS浮动及清除浮动(此一篇足以)
  • 原文地址:https://blog.csdn.net/weixin_43412762/article/details/132757789