简单题/中等题题解.py|豆包MarsCode AI刷题

2 阅读4分钟

176 小C的类二进制拼图

问题描述

小C发现了一种特殊的数字,称为类二进制数字,即仅由数字0和1组成的十进制数。例如,1011100都是类二进制数字,而1123001则不是。现在,小C手上有一个正整数n,他想知道最少需要多少个类二进制数字相加才能得到n


测试样例

样例1:

输入:n = "10101"
输出:1

样例2:

输入:n = "212"
输出:2

样例3:

输入:n = "1000000"
输出:1

样例4:

输入:n = "123456789"
输出:9

样例5:

输入:n = "9876543210"
输出:9

观察多组样例,返回字符串中最大的数字即可,一行拿下!

def solution(n: str) -> int:
    # write code here  
    return max(int(digit) for digit in n)

486 蛇形填充n阶方阵

问题描述

小U面临一个有趣的任务:在一个 n×nn×n 的方阵中填入 11 到 n×nn×n 这些数字,并要求按照蛇形顺序从右上角开始,沿着方阵的边界顺时针进行填充。蛇形填充的特殊排列方式使得每一层数字呈现出波浪形的排列方式。

例如,当 n=4n=4 时,方阵应如下所示:

10 11 12  1
9 16 13  2
8 15 14  3
7  6  5  4

你需要编写程序输出填充后的方阵,确保格式的整齐性。


测试样例

样例1:

输入:n = 4
输出:[[10, 11, 12, 1], [9, 16, 13, 2], [8, 15, 14, 3], [7, 6, 5, 4]]

样例2:

输入:n = 5
输出:[[13, 14, 15, 16, 1], [12, 23, 24, 17, 2], [11, 22, 25, 18, 3], [10, 21, 20, 19, 4], [9, 8, 7, 6, 5]]

样例3:

输入:n = 3
输出:[[7, 8, 1], [6, 9, 2], [5, 4, 3]]

def solution(n: int) -> list:
    # 初始化 n x n 的矩阵
    matrix = [[0] * n for _ in range(n)]
    # 定义四个方向:右、下、左、上
    directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
    # 初始位置和方向
    x, y = 0, n - 1  # 从右上角开始
    direction_index = 0  # 初始方向为右
    # 填充数字
    for num in range(1, n * n + 1):
        matrix[x][y] = num
        # 计算下一个位置
        next_x = x + directions[direction_index][0]
        next_y = y + directions[direction_index][1]
        if not (0 <= next_x < n and 0 <= next_y < n and matrix[next_x][next_y] == 0):
            direction_index = (direction_index + 1) % 4
            next_x = x + directions[direction_index][0]
            next_y = y + directions[direction_index][1]
        # 更新当前位置
        x, y = next_x, next_y
    
    return matrix

431 数字字符串中圆圈的数量计算

问题描述

小I拿到了一串数字字符,她想知道这串数字中一共有多少个圆圈。具体规则如下:

  • 数字0、6、9各含有一个圆圈。
  • 数字8含有两个圆圈。
  • 其他数字不含有任何圆圈。

测试样例

样例1:

输入:s = "1234567890"
输出:5

样例2:

输入:s = "8690"
输出:5

样例3:

输入:s = "1111"
输出:0

题解:确实是简单题,没什么好说的

def solution(s: str) -> int:
    cnt = 0
    for c in s:
        if c == '0':
            cnt += 1 
        if c == '6':
            cnt += 1
        if c == '9':
            cnt += 1
        if c == '8':
            cnt += 2
    return cnt 

中等题

428按位与三元组问题

没什么好说的这道题,题面也不放了,看到题目就知道怎么做了,按照题意模拟即可,毕竟题目给了什么是按位与运算了)

def solution(nums: list) -> int:  
    count = 0  
    n = len(nums)  
    
    for i in range(n):  
        for j in range(n):  
            for k in range(n):  
                if nums[i] & nums[j] & nums[k] == 0:  
                    count += 1  
                    
    return count  

14数组元素之和最小化

题面较短,个人感觉是简单题,初始化一个空数组,不在里面就加进去。第二个条件和第三个条件要同时成立的话,不如让cur初始为k,k个k个的加,保证最小又保证是k的倍数。

def solution(n: int, k: int) -> int:
    res = []
    cur = k 
    while len(res) < n:
        if cur not in res:
            res.append(cur)
        cur += k
    return sum(res)

24小R的随机播放顺序

双端队列,调库

from collections import deque  

def solution(n: int, a: list) -> list:  
    queue = deque(a)  # 使用deque构建队列  
    result = []  # 用于存储播放顺序的结果  

    while queue:  
        # 播放第一首歌曲,并将其加入结果列表  
        result.append(queue.popleft())  
        # 如果队列中还有歌曲,则将下一个歌曲移到最后  
        if queue:  
            queue.append(queue.popleft())  

    return result