欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > 题目训练(字节青训)

题目训练(字节青训)

2025/9/15 4:38:02 来源:https://blog.csdn.net/2301_79218588/article/details/143218563  浏览:    关键词:题目训练(字节青训)

题目描述

小U和小R喜欢探索二进制数字的奥秘。他们想找到一个方法,将两个二进制字符串相加并以十进制的形式呈现。这个过程需要注意的是,他们的二进制串可能非常长,所以常规的方法可能无法处理大数。小U和小R希望你帮助他们设计一个算法,该算法能在保证时间复杂度不超过O(n^2)的前提下,返回两个二进制字符串的十进制求和结果。

def solution(binary1, binary2):# 反转字符串以便从最低位开始相加binary1 = binary1[::-1]binary2 = binary2[::-1]max_length = max(len(binary1), len(binary2))carry = 0result = []for i in range(max_length):bit1 = int(binary1[i]) if i < len(binary1) else 0bit2 = int(binary2[i]) if i < len(binary2) else 0# 计算当前位的和total = bit1 + bit2 + carryresult.append(str(total % 2))  # 当前位的结果carry = total // 2  # 计算进位# 如果最后还有进位,添加到结果中if carry:result.append(str(carry))# 反转结果并转换为十进制result.reverse()decimal_result = str(int(''.join(result), 2))return decimal_resultif __name__ == "__main__":# 你可以添加更多的测试用例print(solution("101", "110") == "11")print(solution("111111", "10100") == "83")print(solution("111010101001001011", "100010101001") == "242420")print(solution("111010101001011", "10010101001") == "31220")

题目描述

给定一段受损的 DNA 碱基序列 dna1,在每次只操作一个碱基的情况下,将其以最少的操作步骤将其还原到未受损的 DNA 碱基序列 dna2。

只可以对 DNA 碱基序列中的一个碱基进行三种操作:

  1. 增加一个碱基
  2. 去除一个碱基
  3. 替换一个碱基

输入描述:

输入两段 DNA 碱基序列,每段分一行输入

第一行为第一段受损的 DNA 碱基序列 dna1

第二行为第二段未受损的 DNA 碱基序列 dna2

输出描述:

最小操作步骤数

备注:

0 <= dna1.length, dna2.length <= 500

dna1 和 dna2 由大写英文字母 A、G、C、T 组成

示例 1

输入

AGCTTAGC

AGCTAGCT

def solution(dna1, dna2):# 初始化动态规划表len1, len2 = len(dna1), len(dna2)dp = [[0] * (len2 + 1) for _ in range(len1 + 1)]# 初始化边界条件for i in range(len1 + 1):dp[i][0] = ifor j in range(len2 + 1):dp[0][j] = j# 填充动态规划表for i in range(1, len1 + 1):for j in range(1, len2 + 1):if dna1[i - 1] == dna2[j - 1]:dp[i][j] = dp[i - 1][j - 1]else:dp[i][j] = min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1return dp[len1][len2]# 测试用例
if __name__ == "__main__":print(solution("AGT", "AGCT") == 1)print(solution("AGCCGAGC", "GCTAGCT") == 4)

题目描述

小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

def solution(n: int) -> list:maxn = 20a = [[0] * maxn for _ in range(maxn)]x, y, tot = 0, n - 1, 1a[x][y] = totwhile tot < n * n:while x + 1 < n and a[x + 1][y] == 0:x += 1tot += 1a[x][y] = totwhile y - 1 >= 0 and a[x][y - 1] == 0:y -= 1tot += 1a[x][y] = totwhile x - 1 >= 0 and a[x - 1][y] == 0:x -= 1tot += 1a[x][y] = totwhile y + 1 < n and a[x][y + 1] == 0:y += 1tot += 1a[x][y] = totreturn [row[:n] for row in a[:n]]

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词