力扣刷题篇之数与位2

news2024/11/26 0:46:49

系列文章目录


目录

系列文章目录

前言

数值计算

总结


前言

 本系列是个人力扣刷题汇总,本文是数与位。刷题顺序按照[力扣刷题攻略] Re:从零开始的力扣刷题生活 - 力扣(LeetCode)

 

数值计算

415. 字符串相加 - 力扣(LeetCode)

class Solution {
    public String addStrings(String num1, String num2) {
        StringBuilder sb = new StringBuilder();
        int carry = 0, i = num1.length()-1, j = num2.length()-1;
        while(i >= 0 || j >= 0 || carry != 0){
            if(i>=0) carry += num1.charAt(i--)-'0';
            if(j>=0) carry += num2.charAt(j--)-'0';
            sb.append(carry%10);
            carry /= 10;
        }
        return sb.reverse().toString();
    }
}

43. 字符串相乘 - 力扣(LeetCode)

class Solution {
    public String multiply(String num1, String num2) {
        int len1 = num1.length(),len2 = num2.length();
        if (len1 == 1 && num1.charAt(0) - '0' == 0
                || len2 == 1 && num2.charAt(0) - '0' == 0) {
            return "0";
        }
        int [] sums = new int [len1+len2];
        int [] nums1 = new int [len1];
        for (int i = 0; i < len1; i++) {
            nums1[i] = num1.charAt(i) - '0';
        }
        for(int i=0;i<len2;i++){
            int mul = num2.charAt(len2-1-i)-'0';
            for(int j=0;j<len1;j++){
                sums[i+j]+=(mul*nums1[len1-1-j]);
            }
        }
        StringBuilder str = new StringBuilder();
        for(int i=0;i<sums.length;i++){
            if(sums[i]>=10){
                sums[i+1] +=sums[i]/10;
                sums[i]%=10;
            }
            if(i==sums.length-1&&sums[i]==0)
                continue;
            str.append(sums[i]);
        }
        return str.reverse().toString();
    }
}

 

使用了一个链表来存储整数的每一位,并在这个链表上进行操作。整体思路是从后往前找到第一个递增的位置 i,然后在 [i+1, t.size()-1] 范围内找到比 i 位置大的最小的数,与 i 位置交换,再调整 [i+1, t.size()-1] 的顺序,最后检查是否越界。如果不越界,返回调整后的整数,否则返回 -1。 

class Solution {
    public int nextGreaterElement(int n) {
        if(n == Integer.MAX_VALUE) return -1;
        LinkedList<Integer> t = new LinkedList<>();
        while (n != 0) {
            t.addFirst(n % 10);
            n = n / 10;
        }

        for (int i = t.size() - 2; i >= 0; --i) {
            if (t.get(i) < t.get(i + 1)) {
                //调整i位置即可
                //向后找比i大的 最小的数的位置 交换
                int targetIndex = i + 1;
                for (int j = i + 1; j < t.size(); ++j) {
                    if (t.get(j) > t.get(i) && t.get(j) <= t.get(targetIndex)) {
                        targetIndex = j;
                    }
                }
                swap(t, i, targetIndex);

                //调整从i+1开始到结尾的顺序 [i+1,t.size()-1] 依次递增 保证最小
                int l =i+1,r=t.size()-1;
                while(l<r){
                    swap(t,l++,r--);
                }


                //判断一下调整完之后是不是越界了
                long res = 0;
                for (int k = 0; k < t.size(); ++k) {
                    res = res * 10 + t.get(k);
                }
                if(res >Integer.MAX_VALUE) return -1;
            
                return (int)res;

            }
        }

        return -1;
    }

    private void swap(LinkedList<Integer> t, int a, int b) {
        int tmp = t.get(a);
        t.set(a, t.get(b));
        t.set(b, tmp);
    }
}

9. 回文数 - 力扣(LeetCode)

 通过反转整数的一半来判断是否为回文数。在反转的过程中,如果反转的数字大于剩余的数字,就可以停止,因为已经检查过一半了。最后,比较原始数字和反转后的数字,如果相等,或者相等除以 10(对于偶数位数的数字),则是回文数。此解法的时间复杂度为 O(log n)。

class Solution {
    public boolean isPalindrome(int x) {
        // 负数和以0结尾但不是0的数不是回文数
        if (x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }

        int revertedNumber = 0;
        // 反转 x 的一半数字
        while (x > revertedNumber) {
            revertedNumber = revertedNumber * 10 + x % 10;
            x /= 10;
        }
        // 对于奇数位数的数字,revertedNumber 的最后一位是中间位,不影响回文判断
        // 对于偶数位数的数字,x 和 revertedNumber 必须完全相等
        return x == revertedNumber || x == revertedNumber / 10;
    }
}

使用了递归的思想。如果一个数字大于等于 10,就继续将其各个位数相加,直到得到一个一位数为止。递归函数的返回值即为最终的结果。 

class Solution {
    public int addDigits(int num) {
        if (num < 10) {
            return num;
        }
   
       return addDigits(num / 10+ num % 10);
    }
}

461. 汉明距离 - 力扣(LeetCode)

 首先计算了两个整数的异或结果,然后遍历这个异或结果的每一位,通过与 1 进行位与操作统计不同位的数量。

class Solution {
    public int hammingDistance(int x, int y) {
        //  0 0 0 1 (1)
        //  0 1 0 0 (4)

        //^ 0 1 0 1 (5)
        //& 0 0 0 1 (1)
        //   ------
        //  0 0 0 1   (结果)

        int t = x ^ y;
        int count = 0;
        while(t != 0) {
            // 将 num 与 1 进行位与操作,统计最低位是否为1
            count += (t & 1);
            // // 将 num 右移一位
            t = t >> 1;
        }
        return count;
    }
}

477. 汉明距离总和 - 力扣(LeetCode)

使用了位运算。对于每个二进制位,它统计在该位上为 1 的元素个数 n,然后计算当前位上的汉明距离,并将其累加到结果中。最终返回总的汉明距离。这种方法的时间复杂度是 O(32n),可以在线性时间内完成计算。 

class Solution {
    public int totalHammingDistance(int[] nums) {
        int res = 0;
        int m = nums.length;

        // 遍历每个二进制位(最多 30 位)
        for (int i = 0; i <= 30; i++) {
            int n = 0;

            // 统计在当前位上为1的元素个数
            for (int num : nums) {
                n += (num >>> i) & 1;
            }

            // 计算当前位上的汉明距离,并累加到结果中
            res += (m - n) * n;
        }
        return res;
    }
}


总结

把数与位的第二部分数值计算写完了,好简单!(最后这个累加汉明距离的要记牢。)我好爱哈哈哈哈,继续加油,多敲多敲,我要找实习了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1213706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sqli-labs(Less-5) updatexml闯关

updatexml() - Xpath类型函数 1. 确定注入点闭合方式 确认为字符型注入 2. 爆出当前数据库的库名 http://127.0.0.1/sqlilabs/Less-5/?id1 and updatexml(~,concat(~,(select database())),~) --3. 爆出当前用户名 http://127.0.0.1/sqlilabs/Less-5/?id1 and updatexml…

windows安装maven,配置环境变量

官网下载&#xff1a; 其他版本找 Other Releases 配置环境变量 1、解压缩之后开始配置环境变量 2、右键此电脑&#xff0c;选中属性->高级系统设置->高级->环境变量。 3、①和②任选一个都可 ①在系统变量那边增加MAVEN_HOME&#xff0c;路径是解压缩后的文件路径。…

Vue3清除Echarts图表

一&#xff1a;前言 Vue3是一款流行的JavaScript框架。它提供了丰富的工具和组件&#xff0c;使得开发者可以轻松构建交互式的Web应用程序。而Echarts是一款功能强大的图表库&#xff0c;它可以帮助开发者以直观的方式展示数据。 在使用Vue3和E charts的过程中&#xf…

STL—next_permutation函数

目录 1.next_permutation函数的定义 2.简单使用 2.1普通数组全排列 2.2结构体全排列 2.3string 3.补充 1.next_permutation函数的定义 next_permutation函数会按照字母表顺序生成给定序列的下一个较大的排列&#xff0c;直到整个序列为降序为止。与其相对的还有一个函数—…

Reids集群

目录 一、集群的概念 1.为什么要搭建集群&#xff1f; 2.Redis搭建集群是否需要考虑状态同步的问题&#xff1f; 二、Redis集群的模式 1.redis集群--主从模式 1.1什么是Redis的主从模式&#xff1f; 1.2.主从模式它们之间的数据是怎么实现一个同步的&#xff1f; 1.3.主…

PyTorch技术和深度学习——四、神经网络训练与优化

文章目录 1.神经网络迭代概念1&#xff09;训练误差与泛化误差2&#xff09;训练集、验证集和测试集划分3&#xff09;偏差与方差 2.正则化方法1&#xff09;提前终止2&#xff09;L2正则化3&#xff09;Dropout 3.优化算法1&#xff09;梯度下降2&#xff09;Momentum算法3)RM…

Mendix 创客访谈录|低代码赋能IoT应用开发

本期创客 郑锴 舜宇光学科技&#xff08;集团&#xff09;有限公司信息技术部 毕业于浙江大学&#xff0c;三年软件设计开发经验。目前任职于舜宇光学科技&#xff08;集团&#xff09;有限公司信息技术部&#xff0c;担任软件开发工程师&#xff0c;主要负责工业互联网相关软件…

2023年09月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python等级考试(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 阅读以下代码,程序输出结果正确的选项是?( ) def process_keywords(keywords_list):unique_keywords = list(set(keywords_list))

基于 React 的 HT for Web ,由厦门图扑团队开发和维护 - 用于 2D/3D 图形渲染和交互

本心、输入输出、结果 文章目录 基于 React 的 HT for Web &#xff0c;由厦门图扑团队开发和维护 - 用于 2D/3D 图形渲染和交互前言什么是 HT for WebHT for Web 的特点如何使用 HT for Web相关链接弘扬爱国精神 基于 React 的 HT for Web &#xff0c;由厦门图扑团队开发和维…

【C++】泛型编程 ④ ( 函数模板 与 普通函数 调用规则 | 类型自动转换 | 类型自动转换 + 显式指定泛型类型 )

文章目录 一、普通函数 与 函数模板 的调用规则 - 类型自动转换1、函数模板和重载函数2、类型自动转换3、代码示例 - 类型自动转换 二、普通函数 与 函数模板 的调用规则 - 类型自动转换 显式指定泛型类型1、类型自动转换 显式指定泛型类型2、代码示例 - 类型自动转换 显式指…

第14届蓝桥杯青少组python试题解析:22年10月选拔赛

选择题 T1. 执行print (5%3) 语句后&#xff0c;输出的结果是 ( ) 0 1 2 3 T2. 以下选项中&#xff0c;哪一个是乘法运算符?&#xff08;&#xff09; % // * ** T3. 已知x3&#xff0c;求x//2x**2的运算结果? 7.5 10 8 10.5 T4. 以下选项中&#xff0c;对下面程序的打印…

P6入门:项目初始化11-项目详情之计算Calculations

前言 使用项目详细信息查看和编辑有关所选项目的详细信息&#xff0c;在项目创建完成后&#xff0c;初始化项目是一项非常重要的工作&#xff0c;涉及需要设置的内容包括项目名&#xff0c;ID,责任人&#xff0c;日历&#xff0c;预算&#xff0c;资金&#xff0c;分类码等等&…

python科研绘图:P-P图与Q-Q图

目录 什么是P-P图与Q-Q图 分位数 百分位数 Q-Q图步骤与原理 Shapiro-Wilk检验 绘制Q-Q图 绘制P-P图 什么是P-P图与Q-Q图 P-P图和Q-Q图都是用于检验样本的概率分布是否服从某种理论分布。 P-P图的原理是检验实际累积概率分布与理论累积概率分布是否吻合。若吻合&#xf…

基于ChatGPT的文本生成艺术框架—WordArt Designer

WordArt Designer是一个基于gpt-3.5 turbo的艺术字生成框架&#xff0c;包含四个关键模块:LLM引擎、SemTypo、Styltypo和TextTypo模块。由gpt-3.5 turbo驱动的LLM引擎可以解释用户输入&#xff0c;从而将抽象概念转化为具体的设计。 SemTypo模块使用语义概念优化字体设计&…

Qt 5.15.11 源码windows编译

1.下载qt5.15.11源码 https://download.qt.io/official_releases/qt/5.15/5.15.11/single/qt-everywhere-opensource-src-5.15.11.zip 2.解码源码到桌面 3.安装cmake ,python ,perl, Visual Studio 2019 Strawberry Perl for Windows Win flex-bison download | SourceForge…

把大模型装进手机,总共分几步?

年初ChatGPT爆火的时候&#xff0c;我去上海参加华为春季新品发布会&#xff0c;用一页keynote提到了大模型技术与手机硬件的结合。虽然只有短短的一两分钟&#xff0c;但我专门发了一条朋友圈&#xff0c;看好自然语言交互能力在手机上的应用。 当时我就有预感&#xff0c;大语…

CSDN每日一题学习训练——Python版(输入起始和结束的正整数,求其两个正整数之间的偶数和、两数相加)

版本说明 当前版本号[20231115]。 版本修改说明20231115初版 目录 文章目录 版本说明目录输入起始和结束的正整数&#xff0c;求其两个正整数之间的偶数和。题目解题思路代码思路参考代码 两数相加题目解题思路代码思路参考代码 输入起始和结束的正整数&#xff0c;求其两个…

51单片机应用从零开始(三)

51单片机应用从零开始&#xff08;一&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;二&#xff09;-CSDN博客 详解 KEIL C51 软件的使用建立工程-CSDN博客 详解 KEIL C51 软件的使用设置工程编绎与连接程序-CSDN博客 目录 1. 用单片机控制第一个灯亮 2. 认识单片…

<MySQL> 查询数据进阶操作 -- 联合查询

目录 一、什么是笛卡尔积&#xff1f; 二、什么是联合查询&#xff1f; 三、内连接 3.1 简介 3.2 语法 3.3 更多的表 3.4 操作演示 四、外连接 4.1 简介 4.2 语法 4.3 操作演示 五、自连接 5.1 简介 5.2 自连接非必要不使用 六、子查询(嵌套查询) 6.1 简介 6.…

C语言:简单的用二维数组打印杨氏三角

杨辉三角&#xff0c;又称帕斯卡三角&#xff0c;是一个数学上的规律图形。它的构造规则如下&#xff1a; 每一行的两个端点数字是1。从第三行开始&#xff0c;每个数字是它上方两个数字的和。每一行数字左右对称。 #include<stdio.h> int main() {int arr[50][50];//定…