176 小C的类二进制拼图
问题描述
小C发现了一种特殊的数字,称为类二进制数字,即仅由数字0和1组成的十进制数。例如,101
和1100
都是类二进制数字,而112
和3001
则不是。现在,小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