LeetCode题目-20250907
LeetCode题目-20250907

LeetCode题目-20250907

最后一个单词的长度

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

提示:

  • 1 <= s.length <= 104
  • s 仅有英文字母和空格 ' ' 组成
  • s 中至少存在一个单词

思考:

唔,如果能够倒着找,找到非空格以及遇到下一个空格之间的字符数。如果正着找的话,那就可以记录一个数字列表,然后把最后一个数字拉出来,或者设置一个变量,记录下这个数字然后不断更新最后输出。这样来看只用循环一遍即可。似乎没有更好的解法了……

class Solution:
    def lengthOfLastWord(self, s: str) -> int:
        k = 0
        num = 0
        for i in range(0,len(s)):
            if s[i]!=" ":
                k = k+1
                
            if k!=0 and s[i]==" ":
                num = k
                k = 0
            
            if k!=0 and i+1 == len(s):
                num = k
        return num

# 或者就是反向遍历
class Solution:
    def lengthOfLastWord(self, s: str) -> int:
        i = len(s) - 1
        # 先把末尾的空格跳过去
        while i >= 0 and s[i] == " ":
            i -= 1
        # 开始计数
        length = 0
        while i >= 0 and s[i] != " ":
            length += 1
            i -= 1
        return length

加一

给定一个表示 大整数 的整数数组 digits,其中 digits[i] 是整数的第 i 位数字。这些数字按从左到右,从最高位到最低位排列。这个大整数不包含任何前导 0。将大整数加 1,并返回结果的数字数组。

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9
  • digits 不包含任何前导 0

思考:

多数情况下还要,末尾数字加一,不过得考虑特殊情况,比如进位以及导致的位数变化。直接定位到最后一个数字,如果是9那么就往前找非9数字,如果没有,那么就是[1]+[0]*len(digits),如果找到了非9的数字,那么就是这个数字加一,后面全是[0]。

代码:

class Solution1:
    def plusOne(self, digits: List[int]) -> List[int]:
        i = length = len(digits)-1
        while digits[i] == 9:
            i -= 1
            if i == -1:
                return [1]+[0]*(length+1)
        digits[i] += 1
        digits[i+1:length+1] = [0]*(length - i)
        return digits

class Solution:
    def plusOne(self, digits: List[int]) -> List[int]:
        for i in range(len(digits)-1, -1, -1):
            if digits[i] < 9:
                digits[i] += 1
                return digits
            digits[i] = 0
        return [1] + digits

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注