力扣刷题篇之数与位2

系列文章目录


目录

系列文章目录

前言

数值计算

总结


前言

 本系列是个人力扣刷题汇总,本文是数与位。刷题顺序按照[力扣刷题攻略] 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 进行位与操作,统计最低位是否为1count += (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.hqwc.cn/news/180353.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WordPress 媒体库文件夹管理插件 FileBird v5.5.4和谐版下载

FileBird是一款WordPress 按照文件夹管理方式的插件。 拖放界面 拖放功能现已成为现代软件和网站的标配。本机拖动事件&#xff08;包括仅在刀片中将文件移动到文件夹以及将文件夹移动到文件夹&#xff09;极大地减少了完成任务所需的点击次数。 一流设计的文件夹树展示 我们…

物联网主机E6000:动环监控的新革命

多协议、多接口的全能主机 在物联网时代&#xff0c;数据的采集和处理已经成为了企业运营的重要环节。而物联网主机E6000&#xff0c;就是这个时代的全能选手。它支持多种协议和接口&#xff0c;无论是视频、设备还是DCS系统的数据&#xff0c;都能轻松接入并进行采集处理。这种…

如何克服微服务测试的挑战并最大化收益?

多年来&#xff0c;微服务一直是行业趋势&#xff0c;但组织却未能从该方法中获益&#xff0c;并因发布失败而苦苦挣扎。这些失败通常归结为测试服务之间的接口以获得预期的质量、安全性和性能的困难。 最终&#xff0c;未能以足够稳健的方式测试这些 API。一线希望是遗留 SOA…

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

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

正版软件|Soundop 专业音频编辑器,实现无缝的音频制作工作流程

关于Soundop Soundop 音频编辑器 直观而专业的音频编辑软件&#xff0c;用于录制、编辑、混合和掌握音频内容。 Soundop 是一款适用于 Windows 的专业音频编辑器&#xff0c;可在具有高级功能的直观灵活的工作区中录制、编辑和掌握音频并混音轨道。音频文件编辑器支持波形和频谱…

第十九章 Java绘图

第十九章 java绘图 19.1 java绘图类 绘图时高级程序设计中非常重要的技术&#xff0c;例如&#xff0c;应用程序可以绘制闪屏图片&#xff0c;背景图片&#xff0c;组件外观等等&#xff0c;Web程序可以绘制统计图&#xff0c;数据库存储图片资源等&#xff0c;真骨耸为“一…

挑战字节软件测试岗,原来这么轻松...

当前就业环境&#xff0c;裁员、失业消息满天飞&#xff0c;好像有一份工作就不错了&#xff0c;更别说高薪了。其实这只是一方面&#xff0c;而另一方面&#xff0c;各大企业依然求贤若渴&#xff0c;高技术人才依然紧缺&#xff0c;只要你技术过硬&#xff0c;拿个年薪50w不是…

第十九章总结

Java绘图类 Graphics 类 Grapics 类是所有图形上下文的抽象基类&#xff0c;它允许应用程序在组件以及闭屏图像上进行绘制。Graphics 类封装了Java 支持的基本绘图操作所需的状态信息&#xff0c;主要包括颜色、字体、画笔、文本、图像等。 Graphics 类提供了绘图常用的…

SpringBoot初始化

Springboot启动流程 框架初始化 配置资源加载器配置primarySources应用环境检测配置系统初始化器配置应用监听器配置main方法所在类 框架启动 自动化装配 初始化器解析 概览 类名: ApplicationContextInitializer介绍&#xff1a;Spring容器刷新之前执行的一个回调函数作用:…

Kafka快速入门

文章目录 Kafka快速入门1、相关概念介绍前言1.1 基本介绍1.2 常见消息队列的比较1.3 Kafka常见相关概念介绍 2、安装Kafka3、初体验前期准备编码测试配置介绍 bug记录 Kafka快速入门 1、相关概念介绍 前言 在当今信息爆炸的时代&#xff0c;实时数据处理已经成为许多应用程序和…

【开源】基于Vue.js的校园二手交易系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目详细录屏 二、功能模块2.1 数据中心模块2.2 二手商品档案管理模块2.3 商品预约管理模块2.4 商品预定管理模块2.5 商品留言板管理模块2.6 商品资讯管理模块 三、实体类设计3.1 用户表3.2 二手商品表3.3 商品预约表3.4 商品预定表3.5 留言表3.6…

Vue 中 slot 是什么?作用?分类?如何实现?

结论先行&#xff1a; slot 插槽&#xff0c;是子组件提供给父组件使用的一个占位符&#xff0c;父组件可以在这个占位符中填充任何模板代码。主要作用就是更好的拓展和定制化组件&#xff0c;例如弹窗组件、表格组件等。分为默认插槽、具名插槽和作用域插槽。 其中前两个都是…