力扣刷题篇之数与位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.mzph.cn/news/144034.shtml

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

相关文章

石原子科技亮相2023成都市信息领域新产品发布会

2023年11月13日至15日&#xff0c;由成都市互联网信息办公室、四川天府新区管委会、成都市经信局市新经济委、成都市农业农村局指导的以“信息创造价值 创新引领未来”为主题的成都市信息领域新产品发布会在科创生态岛1号馆举行。围绕人工智能、区块链、数字化绿色化、数字乡村…

iOS性能优化

了解屏幕成像的原理。 有一个电子枪然后在很多横轴方向上 发射电子&#xff0c;不同横轴的电子枪根据显示器中的硬件时钟产生一系列的定时信号&#xff0c;以此来让电子以不同的时间发射出去 这些电子一瞬间的运动形成了一帧动画。 CPU优化&#xff1a; 1.文本计算优化 如果一…

Unity Meta Quest 一体机开发(六):HandGrabInteractor 和 HandGrabInteractable 知识点

文章目录 &#x1f4d5;教程说明&#x1f4d5;HandGrabInteractor⭐HandGrabAPI⭐HandWristPoint⭐GripPoint⭐PinchPoint⭐PinchArea⭐HandGrabVisual⭐HandGrabGlow &#x1f4d5;HandGrabInteractable⭐Support Grab Type⭐Pinch Grab Rules 和 Palm Grab Rules⭐Unselect M…

BMS系统项目

1、通过电压监测是否冲满&#xff0c;通过电压可以监测是否放完电 电池得参数 单体过压&#xff08;充满电&#xff09; 过压恢复&#xff08;百分之90多&#xff09; 欠压保护&#xff08;百分之几得电&#xff0c;快关机了&#xff09; 欠压恢复&#xff08;就是欠压之上…

C#中.NET 6.0 Windows窗体应用通过EF访问数据库并对数据库追加、删除记录

目录 一、应用程序设计 二、应用程序源码 三、生成效果 前文作者发布了在.NET 6.0 控制台应用中通过EF访问已有数据库&#xff0c;事实上&#xff0c;在.NET 6.0 Windows窗体应用中通过EF访问已有数据库也是一样的。操作方法基本一样&#xff0c;数据库EF模型和上下文都是自…

EV代码签名证书

为了增强软件的安全性和可信度&#xff0c;EV代码签名证书&#xff08;Extended Validation Code Signing Certificate&#xff09;成为了一种具有最高级别保障的关键工具。 EV代码签名证书是一种由受信任的证书颁发机构&#xff08;CA&#xff09;或证书供应商提供的高级别代…

Harmony SDK API 版本 与 Harmony OS 版本对照表,及如何查看鸿蒙手机Harmony SDK Api 版本

Harmony SDK API 版本 与 Harmony OS 版本对照表 Harmony OSHarmony SDK APIHarmony 4.09Harmony 3.19Harmony 3.08Harmony 3.0 pre7Harmony 2.2.06Harmony 2.1.05Harmony 2.04 具体到真机上可能会有差异&#xff0c;如我的手机OS版本是2.0&#xff0c;按照上面表应该是4&…

QML20、布局

1.概述 首先,QML同样允许大家使用硬编码的方式将位置数值直接写到代码中,但是这样做首先难以适应UI的调整,其次代码维护起来也很困难。因此不推荐这样做。推荐大家使用的是以下三种布局管理器:Row,、Column、Grid、Flow,以及使用Anchor进行布局。 2.Row QML 中的 Row 元素…

[IJKPLAYER]基于DEMO分析IJKPLAYER(整理版本)

背景 博主主要是从事C语言开发&#xff0c;因此本文着重强调FFMPEG部分&#xff0c;关于JAVA应用和框架层只是一笔带过。IJKPLAYER的实质是对FFMPEG项目中的ffplayer程序进行的二次封装&#xff0c;通过JNI方式完成对外提供JAVA接口。 1.目录结构 activities:包含了demo的所有…

【电路】MOS管开关电路

目录 简介&#xff1a; MOS管导通特性 应用实例&#xff1a; MOS管的作用-开关 更好的理解方式&#xff1a; 仿真&#xff1a; 简介&#xff1a; MOS管也就是常说的场效应管&#xff08;FET&#xff09;&#xff0c;有结型场效应管、绝缘栅型场效应管&#xff08;又分为…

认知升级:模型与范式转换

你好&#xff0c;我是 EarlGrey&#xff0c;一名双语学习者&#xff0c;会一点编程&#xff0c;目前已翻译出版《Python 无师自通》、《Python 并行编程手册》等书籍。 点击上方蓝字关注我&#xff0c;持续获取编程干货、好书推荐和高效工具分享&#xff0c;一起提升认知和思维…

LeetCode - 141. 环形链表 (C语言,快慢指针,配图)

141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; 1. 什么是快慢指针 这里我们我们将介绍环形链表的经典解法——快慢指针&#xff0c;简单理解&#xff0c;指针移动快的叫做快指针fast&#xff0c;移动速度慢的叫慢指针slow。一般我们设快指针走两步&#xff0c;慢指针走…

RSS订阅快速连接Notion

数环通让您可以通过不到几分钟的时间即可实现RSS订阅与Notion的对接与集成&#xff0c;从而高效实现工作流程自动化&#xff0c;降本增效&#xff01; 1.产品介绍 RSS订阅是数环通的内置应用&#xff0c;很多用户通过RSS订阅来收集自己在各大平台上看的内容&#xff0c;当RSS…

【Mycat2实战】三、Mycat实现读写分离

1. 无聊的理论知识 什么是读写分离 读写分离&#xff0c;基本的原理是让主数据库处理事务性增、改、删操作&#xff0c; 而从数据库处理查询操作。 为什么使用读写分离 从集中到分布&#xff0c;最基本的一个需求不是数据存储的瓶颈&#xff0c;而是在于计算的瓶颈&#xff…

java实现插入排序

图解 以下是Java实现插入排序的代码&#xff1a; public class InsertionSort {public static void main(String[] args) {int[] arr {5, 2, 4, 6, 1, 3};insertionSort(arr);System.out.println(Arrays.toString(arr)); // output: [1, 2, 3, 4, 5, 6]}public static void i…

线程安全问题及其解决

文章目录 一. 线程安全问题1.1 线程不安全的例子1.2 线程不安全的原因1.2.1 随即调度, 抢占式执行1.2.2 修改共享数据1.2.3 修改操作非原子性1.2.4 内存可见性1.2.5 指令重排序1.2.6 总结 二. 线程安全问题的解决2.1 synchronized(解决前三个问题)2.1.1 synchronized 的锁是什么…

247:vue+openlayers 根据坐标显示多边形(3857投影),计算出最大幅宽

第247个 点击查看专栏目录 本示例是演示如何在vue+openlayers项目中根据坐标显示多边形(3857投影),计算出最大幅宽。这里先通过Polygon来显示出多边形,利用getExtent() 获取3857坐标下的最大最小x,y值,通过ransformExtent转换坐标为4326, 通过turf的turf.distance和计算…

社区论坛小程序系统源码+自定义设置+活动奖励 自带流量主 带完整的搭建教程

大家好啊&#xff0c;又到了罗峰来给大家分享好用的源码的时间了。今天罗峰要给大家分享的是一款社区论坛小程序系统。社区论坛已经成为人们交流、学习、分享的重要平台。然而&#xff0c;传统的社区论坛往往功能单一、缺乏个性化设置&#xff0c;无法满足用户多样化的需求。而…

rabbitmq 集群搭建

RabbitMQ集群介绍 RabbitMQ集群是一组RabbitMQ节点&#xff08;broker&#xff09;的集合&#xff0c;它们一起工作以提供高可用性和可伸缩性服务。 RabbitMQ集群中的节点可以在同一物理服务器或不同的物理服务器上运行。 RabbitMQ集群的工作原理是&#xff0c;每个节点在一个…

C++编写的多线程自动爬虫程序

以下是一个使用C编写的爬虫程序&#xff0c;用于爬取Python进行多线程跑数据的内容。本示例使用了Python的requests库来发送HTTP请求&#xff0c;并使用cheeseboy的爬虫ipIP库来设置爬虫ip信息。以下是详细代码和步骤&#xff1a; #include <iostream> #include <stri…