《剑指Offer》Java刷题 NO.47 求1到n的和(&&短路特性、位运算、异常处理机制、快速幂分解实现乘法)

《剑指Offer》Java刷题 NO.47 求1到n的和(&&短路特性、位运算、异常处理机制、快速幂分解实现乘法)

传送门:《剑指Offer刷题总目录》

时间:2020-06-29
题目:

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


思路:
单纯的思维开阔题:
方法一:利用利用短路 特性&& 来实现 if的功能,递归计算
方法二:利用Java异常退出实现递归。为递归退出设置1%n除0异常。
方法三:快速幂分解:
关于如何递归实现ab,有大佬总结过:利用位运算来做,快速幂,快速模乘,
原理是把a拆成2的幂的和,a = 2^e0 + 2^e1 + 2^e2…
那么 a * b = (2^e0 + 2^e1 + 2^e2+…) * b
= b * 2^e0 + b * 2^e1 + b * 2^e2 + …
= (b << e0) + (b << e1) + …
例如:a=5=101=20+23
a
b=b*20+b*23=(b<<0)+(b<<3)


Java代码

/**
 * @author LiMin
 * @Title: SumOf1ToN
 * @Description: 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
 * @date 2020/6/30 9:34
 */
public class SumOf1ToN {
    public static void main(String[] args) {
        SumOf1ToN sumOf1ToN = new SumOf1ToN();
        System.out.println(sumOf1ToN.sumOf1ToNThree(1));
    }

    /**
     * 利用&&短路特性表示if,实现递归
     */
    public int sumOf1ToNOne(int n) {
        int sum = n;
        boolean flag = (n > 0) && (sum += sumOf1ToNOne(n - 1)) > 0;//这里加上boolean完全是为了不报错
        return sum;
    }

    /**
     * 利用Java异常处理机制,除以0为截至条件,实现递归
     */
    public int sumOf1ToNTwo(int n) {
        try {
            int i = 1 % n;//当n==0时会抛出异常
            return n + sumOf1ToNTwo(n - 1);

        } catch (Exception e) {
            return 0;//当n==0时返回0
        }
    }

    /**
     * 快速幂算法实现两数相乘
     */
    public int sumOf1ToNThree(int n) {
        return multi(n, n + 1) >> 1;
    }

    public int multi(int a, int b) {
        int result = 0;
        //利用短路特性模拟if
        boolean flag1 = ((a & 1) == 1) && (result += b) > 0;//a的当前最低位为1时才加上b
        a >>= 1;//a/2
        b <<= 1;//b*2;
        //利用短路特性模拟while
        boolean flag2 = (a != 0) && (result += multi(a, b)) > 0;
        System.out.println(result);
        return result;
    }
}
展开阅读全文

Python数据分析与挖掘

01-08
92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。
©️2020 CSDN 皮肤主题: 游动-白 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值