问题描述
小U得到了一个数字n,他的任务是构造一个特定数组。这个数组的构造规则是:对于每个i从1到n,将数字n到i逆序拼接,直到i等于n为止。最终,输出这个拼接后的数组。
例如,当n等于3时,拼接后的数组是 [3, 2, 1, 3, 2, 3]。
测试样例
样例1:
输入:
n = 3
输出:[3, 2, 1, 3, 2, 3]
样例2:
输入:
n = 4
输出:[4, 3, 2, 1, 4, 3, 2, 4, 3, 4]
样例3:
输入:
n = 5
输出:[5, 4, 3, 2, 1, 5, 4, 3, 2, 5, 4, 3, 5, 4, 5]
完整代码
def solution(n: int) -> list:
# 初始化结果数组
result = []
# 遍历从1到n的每个数字
for i in range(1, n + 1):
# 逆序拼接数字n到i,并添加到结果数组中
for j in range(n, i - 1, -1):
result.append(j)
return result
if __name__ == '__main__':
print(solution(3) == [3, 2, 1, 3, 2, 3])
print(solution(4) == [4, 3, 2, 1, 4, 3, 2, 4, 3, 4])
print(solution(5) == [5, 4, 3, 2, 1, 5, 4, 3, 2, 5, 4, 3, 5, 4, 5])
通过分析和编写上述代码,我学习到了几个重要的编程概念和技巧:
-
循环结构的应用:在这个问题中,我们使用了两层嵌套循环来构建数组。外层循环负责遍历从1到n的每个数字i,而内层循环则负责逆序拼接数字n到i。这种结构让我更加熟悉了如何在实际问题中应用循环,以及如何控制循环的起始和结束条件。
-
数组操作:在Python中,数组(列表)是一种非常灵活的数据结构。通过
append()方法,我们可以轻松地将元素添加到列表的末尾。这个操作在构建数组时非常常用,它让我更加熟悉了如何在循环中动态地构建数组。 -
逆序遍历:在内层循环中,我们使用了
range(n, i - 1, -1)来实现从n到i的逆序遍历。这个技巧让我学会了如何控制循环的步长,以及如何实现逆序遍历。 -
函数定义和测试:通过定义
solution函数并使用if __name__ == '__main__':块来测试函数的正确性,我学习到了如何编写可重用和可测试的代码。这种结构不仅有助于代码的模块化,也方便了后续的维护和扩展。 -
代码的可读性:在编写代码时,我注意到了代码的可读性。通过合理的变量命名和注释,我努力使代码易于理解。这对于团队协作和代码的长期维护非常重要。
-
问题解决思维:这个问题锻炼了我的逻辑思维和问题解决能力。我学会了如何将一个复杂的问题分解成小的、可管理的部分,然后逐一解决。
-
测试的重要性:通过编写测试样例,我意识到了测试在软件开发中的重要性。它不仅可以帮助我们验证代码的正确性,还可以在未来的代码修改中防止回归错误。
总的来说,这个练习不仅提高了我的编程技能,也加深了我对编程概念的理解。通过实际编码和测试,我更加明白了理论与实践的结合,这对于我成为一名更好的程序员是非常有帮助的。