栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

剑指Offer(四十七)-求1+2+3+…+n(Java版)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指Offer(四十七)-求1+2+3+…+n(Java版)

描述

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

数据范围: 0 < n le 2000

进阶: 空间复杂度 O(1)O(1) ,时间复杂度 O(n)O(n)

示例1

输入:5

返回值:15

示例2

输入:1

返回值:1

第一种解法

 上述问题明显是一个等差数列求和问题,等差数列求和公式 sn = (a1 + an)*n /2 ,其中an =  n,a1 =1; 所以结果为sn = (1 + n) *n /2 = (n + n*n) /2; n*n我们可以借用math.pow函数来实现,而除于2 则可以右移一位来解决。所以代码如下

 public int firstSum_Solution(int n) {
        int sum = (int)Math.pow(n,n) + n;
        return sum >> 1;
    }
第二种解法

使用递归来实现,难点在于如何停止递归,我们借助&&来进行判断实现,代码如下

public int secondSum_Solution(int n) {
        int sum = n;
        boolean flag =  (n > 0) && ((sum+=secondSum_Solution(n-1))>0);
        return sum;
    }
第三种解法

就是利用java的异常机制来解决问题,代码如下

public int thirdSum_Solution(int n) {
        try {
            int i = 1 /n;
            n += thirdSum_Solution(n-1);
        }catch (Exception e){

        }
        return n;
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/337344.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号