美文网首页
LeetCode每日练习(66、724、189)

LeetCode每日练习(66、724、189)

作者: ShowMeCoding | 来源:发表于2021-11-16 23:00 被阅读0次
    66-加一

    输入:digits = [1,2,3]
    输出:[1,2,4]
    解释:输入数组表示数字 123,进行加法操作之后的结果为124。

    • 方法1:先转为具体的数,然后进行加法运算,然后转换为数组输出
    class Solution:
        def plusOne(self, digits: List[int]) -> List[int]:
            s = ''
            for num in digits:
                s += str(num)
            res = str(int(s)+1)
            # print(res)
            result = []
            for num in res:
                result.append(int(num))
            return result
    
    • 方法2:考虑到是否进位,进行逐个元素判断
    class Solution:
        def plusOne(self, digits: List[int]) -> List[int]:
            # 先考虑进位问题
            digits = [0] + digits
            # 将个位数 +1
            digits[len(digits)-1] += 1
            # 从后向前判断是否需要进位
            for i in range(len(digits)-1, 0, -1):
                if digits[i] != 10:
                    break
                else:
                    digits[i-1] += 1
                    digits[i] = 0
            # 按照要求进行输出
            if digits[0] == 0:
                return digits[1:]
            else:
                return digits
    
    724-寻找数组的中心下标

    输入:nums = [1, 7, 3, 6, 5, 6]
    输出:3
    解释:
    中心下标是 3 。
    左侧数之和 sum = nums[0] + nums[1] + nums[2] = 1 + 7 + 3 = 11 ,
    右侧数之和 sum = nums[4] + nums[5] = 5 + 6 = 11 ,二者相等。

    • 方法:左侧的数*2 + 中间的数 = 数组的和
    class Solution:
        def pivotIndex(self, nums: List[int]) -> int:
            for i in range(len(nums)):
                if sum(nums[:i])*2 + nums[i] == sum(nums):
                    return i
            return -1
    
    189-轮转数组

    给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。

    输入: nums = [1,2,3,4,5,6,7], k = 3
    输出: [5,6,7,1,2,3,4]
    解释:
    向右轮转 1 步: [7,1,2,3,4,5,6]
    向右轮转 2 步: [6,7,1,2,3,4,5]
    向右轮转 3 步: [5,6,7,1,2,3,4]

    • 方法1:使用数组拼接
    class Solution:
        def rotate(self, nums: List[int], k: int) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            # 方法1
            # res = []
            # length = len(nums)
            # key = length - (k % length)    # 关键取余数操作
            # for i in range(key,length,1):
            #     res.append(nums[i])
            # for j in range(key):
            #     res.append(nums[j])
            # nums[:] = res
    
            # 方法2
            res = []
            length = len(nums)
            key = length - (k % length) 
            res = nums[key:] + nums[:key]
            nums[:] = res
    
    • 方法3:在原来数组的基础上进行修改
    class Solution:
        def rotate(self, nums: List[int], k: int) -> None:
            n = len(nums)
            k = k % n 
            self.reverse(nums, 0, n-1)
            self.reverse(nums, 0, k-1)
            self.reverse(nums, k, n-1)
        def reverse(self, nums, left, right):
            while left < right:
                nums[left], nums[right] = nums[right], nums[left]
                left += 1
                right -= 1
    

    相关文章

      网友评论

          本文标题:LeetCode每日练习(66、724、189)

          本文链接:https://www.haomeiwen.com/subject/jyektrtx.html