数学

leetcode 7 整数反转

思路分析:记住就好。对10取余,将取余的结果,也就是最低位当成高位,之后对x除以10来减少位数。最简单的数学题。需要注意的是,溢出就返回0,这里定义一个long类型,溢出int型范围的数都返回0,没溢出的强转成int。**(非常实际的做法)**类似的题目还有第9、1281题。

class Solution {
    public int reverse(int x) {
        long sum=0;
        while(x!=0){
            int n=x%10;
            x/=10;
            sum=sum*10+n;
        }
        if(sum>Integer.MAX_VALUE||sum<Integer.MIN_VALUE){
            return 0;
        }
        return (int)sum;
    }
}

leetcode 50题 Pow(x,n)
思路:首先必须掌握api。如果连api都不能掌握的话,那一定是做不出来的。

class Solution {
    public double myPow(double x, int n) {
        return Math.pow(x,n);
    }
}
leetcode 69 x的平方根

思路:首先必须掌握api。如果连api都不能掌握的话,那一定是做不出来的。

class Solution {
    public int mySqrt(int x) {
        return (int)(Math.sqrt(x));
    }
}
leetcode 172阶乘后的零

思路:题目提示了5!有一个0,那么只需要关注一个数包含几个5即可。可以记住这个结论。一个数是5的几倍,阶乘就有几个零

class Solution {
    public int trailingZeroes(int n) {
        int count = 0;
        while(n >= 5) {
            count += n / 5;
            n /= 5;
        }
        return count;
    }
}
leetcode49 丑数(重要的一道题)

思路分析:只包括因子2,3,5的数称为丑数。可以注意到2,3,5是互质的。那么把2,3,5作为基本指针。之后让i从1开始遍历到n。为了减少重复计算,取最小的那个。乘以哪个因子就对哪个因子的指针后移。

class Solution {
    public int nthUglyNumber(int n) {
        if(n<=0){
            return -1;
        }
        int[] dp = new int[n];
        dp[0]=1;
        int id2=0,id3=0,id5=0;
        for(int i=1;i<n;i++){
            dp[i]=Math.min(dp[id2]*2,Math.min(dp[id3]*3,dp[id5]*5));
            if(dp[id2]*2==dp[i])
            id2+=1;
            if(dp[id3]*3==dp[i]){
                id3+=1;
            }
            if(dp[id5]*5==dp[i]){
                id5+=1;
            }
        }
        return dp[n-1];
    }
}
leetcode 剑指offer 面试题14-1 剪绳子(经典题

思路:把一个数不停地分割成3+4那么它的乘积就是最大的。这是需要记住的结论。 即一个数减到4就不减了,直接乘。不然就给他减3。

class Solution {
    public int cuttingRope(int n) {
        if(n==1||n==2){
            return 1;
        }
        if(n==3){
            return 2;
        }
        int sum=1;
        while(n>4){
            sum*=3;
            n-=3;
        }
        return sum*n;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值