构造数组的逆序拼接||豆包MarsCord AI刷题

3 阅读2分钟

问题描述

小U得到了一个数字n,他的任务是构造一个特定数组。这个数组的构造规则是:对于每个i从1到n,将数字n到i逆序拼接,直到i等于n为止。最终,输出这个拼接后的数组。

例如,当n等于3时,拼接后的数组是 [3, 2, 1, 3, 2, 3]

解题思路

  1. 对于输入的数字 nnn,需要构造一个数组。

  2. 构造规则:

    • 对于每个 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。

  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]

代码解析

  1. result = [] 初始化一个空列表,存储拼接的结果。
  2. 外层循环 for i in range(1, n + 1) 遍历 iii 从 111 到 nnn。
  3. 内层 range(n, i - 1, -1) 生成从 nnn 到 iii 的逆序序列。
  4. 使用 result.extend(...) 将生成的子序列直接拼接到 result 中。
  5. 最终返回完整数组。

时间复杂度

  • 外层循环运行 nnn 次。
  • 内层逆序拼接最多运行 nnn 次,最少运行 111 次。
  • 因此时间复杂度为 O(n2)O(n^2)O(n2)。