剑指Offer 46 求1+2+3+....n

题目描述

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

思路

  1. 首先没了上面那些关键字你会发现,你不能循环了,所以你得想办法循环,书上给的是构造函数,但是java默认构造函数不初始化,除非你手动,所以说就不行了
  2. 没有if,你会发现递归的条件不能控制了,和for,while一样,其实我们失去的就是控制边界;那么想法就是如何让程序顺利退出;
    3.下面说三种方法,异常,&&短路运算符,次方运算
  static public int Sum_Solution1(int n) {
        try {
            int i=1%n; //递归到底,就会抛出异常
            return n+Sum_Solution(n-1);
        }catch (Exception e)
        {
            return 0;
        }

    }
//短路运算符,先算前面
    static public int Sum_Solution(int n){
        int i = n;
        boolean flag = (n>0) && (n+=Sum_Solution(n-1))>0;
        return n;
    }
//这个其实是公式(n*(n+1)/2)==(n*n+n)/2;不过左移运算符本来就是除法,所以。。。。。
    static public int Sum_Solution2(int n)
    {
        return (int)(Math.pow(n,2)+n)>>1;
    }

收获

  1. 眼界大开啊,各种奇怪的想法;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值