问题描述
小U得到了一个数字n,他的任务是构造一个特定数组。这个数组的构造规则是:对于每个i从1到n,将数字n到i逆序拼接,直到i等于n为止。最终,输出这个拼接后的数组。
例如,当n等于3时,拼接后的数组是 [3, 2, 1, 3, 2, 3]
。
解题思路
-
对于输入的数字 nnn,需要构造一个数组。
-
构造规则:
-
对于每个 iii 从 111 到 nnn,将 nnn 到 iii 的数字逆序拼接。
-
例如,当 n=3n = 3n=3 时:
- i=1i = 1i=1,添加 [3,2,1][3, 2, 1][3,2,1];
- i=2i = 2i=2,添加 [3,2][3, 2][3,2];
- i=3i = 3i=3,添加 [3][3][3]。
-
最终数组为:3,2,1,3,2,33, 2, 1, 3, 2, 33,2,1,3,2,3。
-
-
为实现上述逻辑,可以用嵌套循环:
- 外层循环从 i=1i = 1i=1 到 nnn;
- 内层循环生成从 nnn 到 iii 的数字逆序序列。
代码实现
以下是 Python 实现代码:
python
复制代码
def construct_array(n):
result = []
# 遍历每个 i 从 1 到 n
for i in range(1, n + 1):
# 从 n 到 i 生成数字,加入结果
result.extend(range(n, i - 1, -1))
return result
# 测试
n = 3
output = construct_array(n)
print(output)
输出结果
运行以上代码,当 n=3n = 3n=3 时,输出结果为:
csharp
复制代码
[3, 2, 1, 3, 2, 3]
代码解析
result = []
初始化一个空列表,存储拼接的结果。- 外层循环
for i in range(1, n + 1)
遍历 iii 从 111 到 nnn。 - 内层
range(n, i - 1, -1)
生成从 nnn 到 iii 的逆序序列。 - 使用
result.extend(...)
将生成的子序列直接拼接到result
中。 - 最终返回完整数组。
时间复杂度
- 外层循环运行 nnn 次。
- 内层逆序拼接最多运行 nnn 次,最少运行 111 次。
- 因此时间复杂度为 O(n2)O(n^2)O(n2)。