LeetCode刷题---简单组(五)

博客分享了三道LeetCode算法题及解法。包括求字符串最后一个单词长度、整数数组表示的非负整数加一、两个二进制字符串求和。针对每道题给出示例,并介绍了不同的解题思路,如使用strip、split等方法处理字符串,对数组元素进行循环判断等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🍒题目一 58. 最后一个单词的长度

请添加图片描述
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

示例 1:

输入:s = “Hello World”
输出:5
解释:最后一个单词是“World”,长度为5。
示例 2:

输入:s = " fly me to the moon "
输出:4
解释:最后一个单词是“moon”,长度为4。
示例 3:

输入:s = “luffy is still joyboy”
输出:6
解释:最后一个单词是长度为6的“joyboy”。


🍒解法一

自己写的,比较der

class Solution(object):
    def lengthOfLastWord(self, s):
        """
        :type s: str
        :rtype: int
        """
        count = 0
        ls = []
        s = s.strip()
        if ' ' not in s:
            return len(s)
       
        for i in range(-1,-len(s),-1):
            if s[i] == ' ':
                break
            ls.append(s[i])
            count +=1
        str1 = ''.join(ls[::-1])
        return count

使用strip给字符串收尾去空格,之后判断如果去重后的字符串里没有空格了,俺就说明是一个单词,返回单词长度即可,否则从后进行遍历,遇到第一个空格退出循环,使用count进行长度计数


🍒解法二


class Solution(object):
  def lengthOfLastWord(self, s):
      """
      :type s: str
      :rtype: int
      """
      return len(s.strip().split(" ")[-1])

strip去收尾空格后使用split进行分割为一个列表,选择最后一个,妙哉~


🍒题目二 66. 加一

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3:

输入:digits = [0]
输出:[1]

注意这里最好看英文,中文有点难理解
You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from most significant to least significant in left-to-right order. The large integer does not contain any leading 0’s.

Increment the large integer by one and return the resulting array of digits.
Example 1:

Input: digits = [1,2,3]
Output: [1,2,4]
Explanation: The array represents the integer 123.
Incrementing by one gives 123 + 1 = 124.
Thus, the result should be [1,2,4].
Example 2:

Input: digits = [4,3,2,1]
Output: [4,3,2,2]
Explanation: The array represents the integer 4321.
Incrementing by one gives 4321 + 1 = 4322.
Thus, the result should be [4,3,2,2].
Example 3:

Input: digits = [9]
Output: [1,0]
Explanation: The array represents the integer 9.
Incrementing by one gives 9 + 1 = 10.
Thus, the result should be [1,0].

🍒解法一

来自某位大佬的题解

class Solution:
    def plusOne(self, digits):
        digits[-1]+= 1 
        for i in range(-1,-len(digits),-1):
            if digits[i] == 10:
                digits[i] = 0
                digits[i-1]+=1
        if digits[0] ==10: 
            digits[0]=0
            digits.insert(0,1)   
        return digits 

这里我解释一下,首先给最后一位+1
之后使用for循环,从后往前对每一位进行判断,是否等于10,若等于则将当前位置置为0,前一位置为1,若例子如999这样的,那么第一位在经过循环处理后为10,则需要使用insert开辟一个单位。

🍒题目三 67. 二进制求和

给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。

示例 1:

输入:a = “11”, b = “1”
输出:“100”
示例 2:

输入:a = “1010”, b = “1011”
输出:“10101”

🍒解法一

class Solution(object):
    def addBinary(self, a, b):
        len1 = len(a)
        len2 = len(b)

        if len1 < len2:
            a = '0' * (len2 - len1) + a
        elif len2 < len1:
            b = '0' * (len1 - len2) + b

        digits = list(a)  # 创建一个列表来存储结果
        carry = 0  # 初始化进位

        for i in range(len(digits) - 1, -1, -1):
            digit_sum = int(a[i]) + int(b[i]) + carry
            digits[i] = str(digit_sum % 2)  # 计算当前位的值
            carry = digit_sum // 2  # 计算进位

        if carry:  # 如果最高位有进位,需要在最前面加上 '1'
            digits.insert(0, '1')

        return ''.join(digits)  # 将列表转换为字符串

请添加图片描述


挑战与创造都是很痛苦的,但是很充实。

### LeetCode 基础语法入门教程 LeetCode 是程序员提升算法能力的重要平台之一,掌握其基础语法对于高效解至关重要。以下是关于 C++ 和 Java 的基础语法要点以及如何应用这些知识来解决 LeetCode 上的问。 #### 1. 数据类型与变量 C++ 提供了多种基本数据类型,包括但不限于 `int`、`long` 和 `double` 等[^2]。在编写程序时,应根据具体需求选择合适的数据类型以优化内存使用和计算效率。例如,在处理大规模数值运算时,推荐优先考虑浮点数或长整型以避免溢出问。 #### 2. 控制流语句 控制流是编程的核心部分,它决定了代码执行路径的选择逻辑。常用的条件分支结构如 `if...else` 或者更复杂的多路判断工具——`switch case` 可帮助开发者根据不同输入情况采取相应操作。此外还有循环机制(for/while),它们允许重复执行某段特定指令直到满足终止条件为止。 #### 3. 容器类简介及其应用场景分析 为了更好地管理和存储大量动态变化的信息单元群对象集合体概念模型抽象表示形式即我们常说的各种标准模板库(STL)件实例化后的实体形态表现出来的东西叫做容器(Container),其中最常用的一些包括: - **Vector**: 动态数,支持随机访问并能在尾部快速增删元素。 - **Set & Unordered_Set**: 分别代表有序集合并具备查找功能的哈希表版本;前者按升序排列后者则不关心顺序只关注唯一性检验速度更快些时候会用到find()方法来进行成员存在性的检测工作流程简化很多哦~ - **Map & Multimap**: 键值映射关系管理利器,能够轻松实现一对一或多对一关联查询任务目标达成效果显著提高工作效率的同时也减少了错误发生的可能性几率大大降低啦!另外还有一种叫Unorderd_Map变种形式同样适用于某些特殊场合条件下呢😊 #### 4. 特殊用途的数据结构介绍 - Deque (双端队列) Deque是一种可以在两端都进行插入删除操作非常灵活方便的一种线性序列结构形式表达方式呈现出来的样子感觉特别棒👍🏻通过下面这个例子我们可以看到它是怎么被创建出来的:`Deque<Integer> deque = new LinkedList<>();` 这样我们就得到了一个基于链接列表实现原理构建而成的新对象实例可供后续进一步开发拓展之用了呀😄[^3] #### 5. 关于栈(Stacks)的知识补充说明 最后值得一提的是有关Stack方面的内容知识点分享给大家知道一下吧~原来啊,在Standard Template Library里面啊,我们的老朋友Stack其实背后隐藏着秘密武器呢🧐那就是它可以由三种不同的底层支撑技术方案任选其中之一作为实际运行环境下的物理载体介质哟😎分别是向量(Vector),双向队列(Deque)或者是简单的单链表(List)...怎么样是不是很神奇呢😉[^4] ```java // 示例:Java 中 Stack 的简单使用 import java.util.Stack; public class Main { public static void main(String[] args) { Stack<Integer> stack = new Stack<>(); // 添加元素 stack.push(10); stack.push(20); System.out.println("Top element is: " + stack.peek()); // 输出顶部元素 // 删除顶部元素 stack.pop(); System.out.println("After popping, top element is: " + stack.peek()); } } ``` ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小馒头学python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值