0
点赞
收藏
分享

微信扫一扫

LeetCode刷题(1)

书坊尚 2022-03-11 阅读 76

各位相加 -- 简单

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。

这道题的本质是计算自然数num 的数根。

数根又称数字根(Digital root),是自然数的一种性质,每个自然数都有一个数根。对于给定的自然数,反复将各个位上的数字相加,直到结果为一位数,则该一位数即为原自然数的数根。

class Solution:
    def addDigits(self, num: int) -> int:
        if num // 10 == 0:
            return num
        numNew = 0
        while num // 10 != 0:
            numNew += (num % 10)
            num //= 10
        numNew += num
        return self.addDigits(numNew)

最长序列 I -- 简单

给你两个字符串 a 和 b,请返回 这两个字符串中 最长的特殊序列  的长度。如果不存在,则返回 -1 。
「最长特殊序列」 定义如下:该序列为 某字符串独有的最长子序列(即不能是其他字符串的子序列) 。
字符串 s 的子序列是在从 s 中删除任意数量的字符后可以获得的字符串。

例如,"abc" 是 "aebdc" 的子序列,因为删除 "aebdc" 中斜体加粗的字符可以得到 "abc" 。 "aebdc" 的子序列还包括 "aebdc" 、 "aeb" 和 "" (空字符串)。

字符串的子序列的长度不会超过该字符串的长度。若子序列的长度等于字符串的长度,那么子序列就是该字符串。

若两字符串不相同,那么我们可以选择较长的字符串作为最长特殊序列,显然它不会是较短的字符串的子序列。特别地,当两字符串长度相同时(但不是同一字符串),我们仍然可以选择其中的一个字符串作为最长特殊序列,它不会是另一个字符串的子序列。

若两字符串相同,那么任一字符串的子序列均会出现在两个字符串中,此时应返回 -1。

class Solution:
    def findLUSlength(self, a: str, b: str) -> int:
        return max(len(a),len(b)) if a!=b else -1

子树范围和 -- 中等

给你一个整数数组 nums 。nums 中,子数组的 范围 是子数组中最大元素和最小元素的差值。

返回 nums 中 所有 子数组范围的 和 。

子数组是数组中一个连续 非空 的元素序列。

class Solution:
    def subArrayRanges(self, nums: List[int]) -> int:
        n = len(nums)
        sub = 0
        for i in range(0, n):
            minVal = maxVal = nums[i]
            for j in range(i+1, n):
                temp = nums[j]
                minVal = min(minVal, temp)
                maxVal = max(maxVal, temp)
                sub += maxVal - minVal
        return sub
举报

相关推荐

0 条评论