面试经典150题(108-110)

leetcode 150道题 计划花两个月时候刷完之未完成后转,今天(第3天)完成了3道(108-110)150

108.(201. 数字范围按位与) 题目描述:

bash 复制代码
给你两个整数 left 和 right ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。

第一版(我是第一时间考虑怎么缩小范围然后再去把范围内的所有数求 & 运算,能过但是效率肯定低)

java 复制代码
class Solution {
    public int rangeBitwiseAnd(int left, int right) {
        int powNum=(int)(Math.log(left)/Math.log(2));
        int max=(int)(Math.pow(2,powNum+1));
        if(max<right){
            return 0;
        }
        max=right;
        int res=max;
        for(int m=left;m<max;m++){
            res&=m;
        }
        return res;
    }
}

第二版(看了解题求公共从1开始的字节就行,我在这个基础上加上我上面的缩小范围的判断)

java 复制代码
class Solution {
    public int rangeBitwiseAnd(int left, int right) {
        int powNum=(int)(Math.log(left)/Math.log(2));
        int max=(int)(Math.pow(2,powNum+1));
        if(max<right){
            return 0;
        }
        int  count=0;
        while(left<right){
            left>>=1;
            right>>=1;
            count++;
        }
        return left<<count;
    }
}

109.(9. 回文数)题目描述:

bash 复制代码
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
输入:x = 121
输出:true
输入:x = -121(负数都不是)
输出:false

第一版(这个 java 占大便宜,溢出不会报错。会转为负数,这个也是看了解题才知道。。)

java 复制代码
class Solution {
    public boolean isPalindrome(int x) {
        if(x<0){
            return false;
        }
        int res=0;
        int num=x;
        // 反转时候 res已经溢出为负数了就可以直接退出了
        while(num!=0&&res>=0){
            res*=10;
            res+=(num%10);
            num=num/10;
        }
        return res==x;
    }
}

110.(66. 加一)题目描述:

bash 复制代码
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。

第一版(这个题我有印象的记得第一次考虑好多。。写的好复杂。。这次就很随意,它主要是只是加一,这个明白了就很简单)

java 复制代码
class Solution {
    public int[] plusOne(int[] digits) {
        for(int i=digits.length-1;i>=0;i--){
            if(digits[i]==9){
                digits[i]=0;
            }else{
                digits[i]++;
                return digits;
            }
        }
        int[] res=new int[digits.length+1];
        res[0]=1;
        return res;
    }
}

催婚、催婚、年轻人的悲哀啊!!!

好好学习吧,自己不适合。

相关推荐
foolish..1 分钟前
动态规划笔记
笔记·算法·动态规划
消失的dk1 分钟前
算法---动态规划
算法·动态规划
羑悻的小杀马特1 分钟前
【动态规划篇】欣赏概率论与镜像法融合下,别出心裁探索解答括号序列问题
c++·算法·蓝桥杯·动态规划·镜像·洛谷·空隙法
绍兴贝贝2 分钟前
代码随想录算法训练营第四十六天|LC647.回文子串|LC516.最长回文子序列|动态规划总结
数据结构·人工智能·python·算法·动态规划·力扣
愚润求学2 分钟前
【动态规划】二维的背包问题、似包非包、卡特兰数
c++·算法·leetcode·动态规划
救赎小恶魔4 分钟前
C++算法(5)
java·c++·算法
叫我一声阿雷吧4 分钟前
【信奥赛基础】动态规划:小学生也能懂的必考算法入门
算法·动态规划
重生之后端学习43 分钟前
236. 二叉树的最近公共祖先
java·数据结构·算法·职场和发展·深度优先
就不掉头发1 小时前
回溯法----不断地尝试直到找到成功
算法
2501_901147831 小时前
有序数组单一元素查找:从通用解法到算法极致优化——兼谈高性能计算基础思路
算法·面试·职场和发展