LeetCode刷题(33、34、35、36)

目录

一、搜素旋转排序数组

1、题目描述

2、题解

3、源码

二、在排序数组中查找元素的第一个和最后一个位置

1、题目描述

2、题解

3、源码

三、搜索插入元素的位置

1、题目描述

2、题解

3、源码

四、有效数独

1、题目描述

2、题解

3、源码

五、外观数列

1、题目描述

2、题解

3、源码


一、搜素旋转排序数组

1、题目描述

2、题解

3、源码

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        for i in range(len(nums)):
            if nums[i] == target:
                return i
        else:
            return -1

二、在排序数组中查找元素的第一个和最后一个位置

1、题目描述

2、题解

3、源码

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        l = 0
        r = len(nums) - 1
        Left = -1
        Right = -1
        while l < len(nums):
            if nums[l] == target:
                Left = l
                break
            l +=1
        while r >= 0:
            if nums[r] == target:
                Right = r
                break
            r -=1
        return Left,Right

三、搜索插入元素的位置

1、题目描述

2、题解

3、源码

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        for i in range(len(nums)):
            if target == nums[i]:
                return i
            if (target < nums[i]):
                return i
        else:
            return i + 1

四、有效数独

1、题目描述

 

2、题解

3、源码

class Solution:
    def isValidSudoku(self, board: List[List[str]]) -> bool:
        row, col, sqrt = defaultdict(set), defaultdict(set), defaultdict(set)
        for i in range(9):
            for j in range(9):
                val = board[i][j]
                if val == '.':
                    continue
                point = i // 3 * 3 + j // 3
                if val in row[i] or val in col[j] or val in sqrt[point]:
                    print(i, j, val)
                    print(row, col, sqrt)
                    return False
                row[i].add(val)
                col[j].add(val)
                sqrt[point].add(val)
        return True


五、外观数列

1、题目描述

 

2、题解

3、源码

class Solution:
    def countAndSay(self, n: int) -> str:
        pre = ''
        cur = '1'

        # 从第 2 项开始
        for _ in range(1, n):
            # 这里注意要将 cur 赋值给 pre
            # 因为当前项,就是下一项的前一项。有点绕,尝试理解下
            pre = cur
            # 这里 cur 初始化为空,重新拼接
            cur = ''
            # 定义双指针 start,end
            start = 0
            end = 0
            # 开始遍历前一项,开始描述
            while end < len(pre):
                # 统计重复元素的次数,出现不同元素时,停止
                # 记录出现的次数,
                while end < len(pre) and pre[start] == pre[end]:
                    end += 1
                # 元素出现次数与元素进行拼接
                cur += str(end-start) + pre[start]
                # 这里更新 start,开始记录下一个元素
                start = end
        
        return cur


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值