力扣爆刷第156天之TOP100五连刷46-50(字符串转整数、括号生成、两数相加)

力扣爆刷第156天之TOP100五连刷46-50(字符串转整数、括号生成、两数相加)

文章目录

      • 力扣爆刷第156天之TOP100五连刷46-50(字符串转整数、括号生成、两数相加)
      • 一、8. 字符串转换整数 (atoi)
      • 二、22. 括号生成
      • 三、70. 爬楼梯
      • 四、2. 两数相加
      • 五、165. 比较版本号

一、8. 字符串转换整数 (atoi)

题目链接:https://leetcode.cn/problems/string-to-integer-atoi/description/
思路:本题是把字符串转成整数,然后按照取出前置空格,前置0,的方式,只要读取了数字,后面遇到非数字部分直接返回,所以要从前往后逐步进行操作,首先就是取出前置空格,然后判断符号位,然后进入数字拼接部分,然后此处要注意是否超出界限。
所谓的超出界限,因为Integer.MAX_VALUE=2^31-1,我们每次拼接数字的时候都是把res*10+当前数,所以只要res>max再乘10一定超出了,又或者res = max,但最后一位数大于7,也超出了,这是因为Integer.MAX_VALUE的最后一位是7.

class Solution {public int myAtoi(String s) {if(s.length() == 0) return 0;char[] list = s.toCharArray();int res = 0, head = 1, i = 0, end = Integer.MAX_VALUE / 10;while(i < list.length && list[i] == ' ') i++;if(i == list.length) return 0;if(list[i] == '-') head = -1;if(list[i] == '-' || list[i] == '+') i++;for(int j = i; j < list.length; j++) {if(list[j] < '0' || list[j] > '9') break;if(res > end || res == end && list[j] > '7') return head == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;res = res * 10 + (list[j] - '0');}return res * head;}
}

二、22. 括号生成

题目链接:https://leetcode.cn/problems/generate-parentheses/description/
思路:括号生成,类似于排列,但又没必要提前拼接好再排列,可以在不指定起始位置然后进行回溯算法,每次都从索引0开始,就可以组合左右括号,然后正常递归收集,在收集完成后,需要判断生成的是否符合规则。规则通过计数实现,出现左括号+1,出现右括号-1,如果期间累加值为负数,则说明生成的括号非法。

class Solution {char[] cList = {'(', ')'};List<String> list = new ArrayList<>();StringBuilder sb = new StringBuilder();public List<String> generateParenthesis(int n) {backTracking(n*2);return list;}void backTracking(int n) {if(sb.length() == n) {if(isTrue()) {list.add(sb.toString());}return;}for(int i = 0; i < 2; i++) {sb.append(cList[i]);backTracking(n);sb.deleteCharAt(sb.length()-1);}}boolean isTrue() {int x = 0;for(int i = 0; i < sb.length(); i++) {char c = sb.charAt(i);if(c == '(') x++;else if(c == ')') x--;if(x < 0) return false;}return x == 0;}
}

三、70. 爬楼梯

题目链接:https://leetcode.cn/problems/climbing-stairs/description/
思路:爬楼梯也是经典动态规划题目了,类似于斐波那契数列,每次只能爬1个台阶或者2个台阶,那么也就是说其他抵达每一个台阶只依赖于该台阶的前两个台阶,只需要知道抵达这两个台阶有多少种方法,就能知道抵达当前台阶有多少种方法,由此维持两个状态即可,记录前两个位置。

class Solution {public int climbStairs(int n) {if(n < 3) return n;int a = 1, b = 2, c = 0;for(int i = 3; i <= n; i++) {c = a + b;a = b;b = c;}return c;}
}

四、2. 两数相加

题目链接:https://leetcode.cn/problems/add-two-numbers/description/
思路:链表节点相加,拼接为整数,只需要注意每次的进位即可,然后为了防止链表不等长,可以通过加0的方式替换,方便一个while中进行累加完。

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {int res = 0;ListNode root = new ListNode(), p = root;while(l1 != null || l2 != null) {int a = l1 == null ? 0 : l1.val;int b = l2 == null ? 0 : l2.val;int sum = a + b + res;ListNode t = new ListNode(sum % 10);res = sum / 10;p.next = t;p = t;l1 = l1 == null ? l1 : l1.next;l2 = l2 == null ? l2 : l2.next;}if(res == 1) p.next = new ListNode(res);return root.next;}}

五、165. 比较版本号

题目链接:https://leetcode.cn/problems/compare-version-numbers/description/
思路:比较版本号,其实就是数字比较,但是关键点在于,两个字符串中的每一组数字如何比较,其实就是用“.”来划分数字,两个字符串,一个一个来,第一个字符串计算出一个数字,然后等第二个计算,计算完再比较,然后再进入下一轮。

class Solution {public int compareVersion(String version1, String version2) {int i = 0, j = 0, m = version1.length(), n = version2.length();while(i < m || j < n) {int a = 0;for(; i < m; i++) {char c = version1.charAt(i);if(c == '.') break;a += a * 10 + (c - '0');}int b = 0;for(; j < n; j++) {char c = version2.charAt(j);if(c == '.') break;b += b * 10 + (c - '0');}if(a != b) return a > b ? 1 : -1;i++;j++;}return 0;}
}

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

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

相关文章

CST--如何在PCB三维模型中自由创建离散端口

在使用CST电磁仿真软件进行PCB的三维建模时&#xff0c;经常会遇到不能自动创建离散端口的问题&#xff0c;原因有很多&#xff0c;比如&#xff1a;缺少元器件封装、开路端口、多端子模型等等&#xff0c;这个时候&#xff0c;很多人会选择手动进行端口创建&#xff0c;但是&a…

【redis】Redis AOF

1、AOF的基本概念 AOF持久化方式是通过保存Redis所执行的写命令来记录数据库状态的。AOF以日志的形式来记录每个写操作&#xff08;增量保存&#xff09;&#xff0c;将Redis执行过的所有写指令记录下来&#xff08;读操作不记录&#xff09;。AOF文件是一个只追加的文件&…

已解决javax.security.auth.login.LoginException:登录失败的正确解决方法,亲测有效!!!

已解决javax.security.auth.login.LoginException&#xff1a;登录失败的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 出现问题的场景 报错原因 解决思路 解决方法 1. 检查用户名和密码 用户名和密码验证 2. 验证配置文件 …

使用System.getProperty获取系统属性

使用System.getProperty获取系统属性 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨在Java中如何使用System.getProperty方法获取系统属性&…

Spark基于DPU的Native引擎算子卸载方案

1.背景介绍 Apache Spark&#xff08;以下简称Spark&#xff09;是一个开源的分布式计算框架&#xff0c;由UC Berkeley AMP Lab开发&#xff0c;可用于批处理、交互式查询&#xff08;Spark SQL&#xff09;、实时流处理&#xff08;Spark Streaming&#xff09;、机器学习&a…

昇思25天学习打卡营第5天|MindSpore-ResNet50图像分类

MindSpore-ResNet50图像分类 CIFAR-10数据集 CIFAR-10数据集是一个广泛使用的图像分类数据集,它包含了60,000张32x32的RGB彩色图像,分为10个类别,每个类别有6,000张图像。这些类别包括飞机(airplane)、汽车(automobile)、鸟类(bird)、猫(cat)、鹿(deer)、狗(dog…

Echarts地图实现:山东省报考人数

Echarts地图实现&#xff1a;山东省报考人数 效果预览 设计思路 数据可视化&#xff1a;选择地图作为数据展示的方式&#xff0c;可以直观地展示山东省不同城市的报考人数分布。交互性&#xff1a;通过ECharts的交互功能&#xff0c;如提示框&#xff08;tooltip&#xff09;…

《晨集》开源软件平台的创新与发展

一、引言 在数字化浪潮的推动下&#xff0c;开源软件平台已成为推动软件创新、促进知识共享的重要力量。《晨集》作为新兴的开源软件平台&#xff0c;其上线标志着开源生态圈的又一重要里程碑。本文旨在探讨《晨集》开源软件平台的创新特点、对开发者社区的影响以及未来发展趋…

SQL | 主键(Primary Key)和外键(Foreign Key)有什么区别| 用一个简单例子说明

如是我闻&#xff1a; 主键&#xff08;Primary Key&#xff09;和外键&#xff08;Foreign Key&#xff09;是确保数据完整性的两个基本概念&#xff0c;下面我们尝试用一个形象的例子来理解这两个概念。 基本定义 主键&#xff08;Primary Key&#xff09; 一个主键是一个…

JavaWeb系列十七: jQuery选择器 上

jQuery选择器 jQuery基本选择器jquery层次选择器基础过滤选择器内容过滤选择器可见度过滤选择器 选择器是jQuery的核心, 在jQuery中, 对事件处理, 遍历 DOM和Ajax 操作都依赖于选择器jQuery选择器的优点 $(“#id”) 等价于 document.getElementById(“id”);$(“tagName”) 等价…

CMMI认证等级是如何划分的?

CMMI&#xff08;Capability Maturity Model Integration&#xff09;认证等级是根据组织在软件开发和维护过程中的成熟度水平进行划分的。它一共包含五个级别&#xff0c;每个级别都代表了不同的过程成熟度和组织能力。以下是CMMI认证等级的详细划分&#xff1a; 初始级&…

Linux 日志文件

Linux 日志文件 在 Linux 系统中&#xff0c;日志文件是记录系统和应用程序运行状态、错误信息、用户活动等重要数据的文件。通过分析日志文件&#xff0c;管理员可以监控系统的健康状况、诊断问题、追踪安全事件以及了解系统的使用模式。 常见的 Linux 日志文件 /var/log/mes…

Java中double类型数据进行运算的时候出现精度丢失问题

精度丢失通常发生在浮点数运算中。以下是几个常见的例子展示了浮点数精度丢失的现象&#xff1a; 示例 1: 简单加减法中的精度丢失 在某些情况下&#xff0c;浮点数的简单加减法会产生意想不到的结果。 public class PrecisionLossExample {public static void main(String…

【数据可视化技术】1、如何使用Matplotlib和Seaborn库在Python中绘制热力图

热力图是一种数据可视化技术&#xff0c;可以显示变量之间的相关性。这个代码段是数据分析和可视化的常用方法&#xff0c;特别适合于展示变量之间的相关性&#xff0c;对于数据科学和机器学习项目非常有帮助。 1、 导入必要的库 首先&#xff0c;确保你已经安装了matplotlib…

收银系统源码-千呼新零售【分销商城】

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

水位自动监测摄像机

随着科技的不断进步&#xff0c;水位自动监测摄像机作为现代智能监控技术的重要应用&#xff0c;正在广泛应用于水利工程、防洪管理和环境监测等领域&#xff0c;显著提升了监测效率和数据准确性。水位自动监测摄像机利用高精度摄像头和先进的图像处理技术&#xff0c;能够实时…

鸿蒙系统——强大的分布式系统

鸿蒙相比较于传统安卓最最最主要的优势是微内核分布式操作系统&#xff0c;具有面向未来&#xff0c;跨设备无缝协作&#xff0c;数据共享的全场景体验。下面简单来感受一下鸿蒙系统的多端自由流转。 自由流转概述 场景介绍 随着全场景多设备的生活方式不断深入&#xff0c;…

Python处理word的常用操作详解

Python 处理 Word 文档通常使用 python-docx 库。以下是一些常用的操作和相应的代码示例&#xff1a; 这些是使用 python-docx 库处理 Word 文档时的一些常用操作。根据你的具体需求&#xff0c;可能还需要探索更多的功能和方法。在使用这些功能之前&#xff0c;请确保已经安装…

解释什么是lambda函数?它有什么好处?

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

深度解密Spark性能优化之道

课程介绍 课程通过实战案例解析和性能调优技巧的讲解&#xff0c;帮助学员提升大数据处理系统的性能和效率。课程内容涵盖了Spark性能调优的各个方面&#xff0c;包括内存管理、并行度设置、数据倾斜处理、Shuffle调优、资源配置等关键技术和策略。学员将通过实际案例的演示和…