构造特定数组的逆序拼接

149 阅读3分钟

分析

对于给定的数字 n,我们要构造一个数组,这个数组由从 n 到 1 的逆序拼接构成,直到达到 i = n。具体步骤如下:

  1. 从 i = 1 开始,直到 i = n
  2. 对于每个 i,将数字从 n 到 i 依次逆序拼接起来。
  3. 将拼接后的数字(作为字符串)转换为整数,并添加到数组中。

示例分析

  • 样例1

    • 输入:n = 3

    • 构造过程:

      • i = 1 时,拼接 3 到 1 得到 321,但只需要逐个数字逆序拼接并依次添加到数组,即 [3, 2, 1]

      • 接下来,继续将 3 拼接到每个前面的数字后面,直到 i = n

        • 3 拼接到 [3, 2, 1] 后面得到 [3, 2, 1, 3]
        • 2 拼接到 [3, 2, 1, 3] 后面(但只拼接到当前 i 的值,即 2),但这里由于 i 递减结束,所以直接拼接 3 得到 [3, 2, 1, 3, 2, 3]
    • 输出:[3, 2, 1, 3, 2, 3]

  • 样例2

    • 输入:n = 4

    • 构造过程:

      • i = 1 时,拼接 4 到 1 得到 [4, 3, 2, 1]

      • 接下来,继续将 4 拼接到每个前面的数字后面:

        • 4 拼接到 [4, 3, 2, 1] 后面得到 [4, 3, 2, 1, 4]
        • 3 拼接到 [4, 3, 2, 1, 4] 后面得到 [4, 3, 2, 1, 4, 3]
        • 2 拼接到 [4, 3, 2, 1, 4, 3] 后面得到 [4, 3, 2, 1, 4, 3, 2]
        • 最后 4 拼接到 [4, 3, 2, 1, 4, 3, 2] 后面得到 [4, 3, 2, 1, 4, 3, 2, 4, 3, 4]
    • 输出:[4, 3, 2, 1, 4, 3, 2, 4, 3, 4]

  • 样例3

    • 输入:n = 5

    • 构造过程:

      • i = 1 时,拼接 5 到 1 得到 [5, 4, 3, 2, 1]

      • 接下来,继续将 5 拼接到每个前面的数字后面:

        • 5 拼接到 [5, 4, 3, 2, 1] 后面得到 [5, 4, 3, 2, 1, 5]
        • 4 拼接到 [5, 4, 3, 2, 1, 5] 后面得到 [5, 4, 3, 2, 1, 5, 4]
        • 3 拼接到 [5, 4, 3, 2, 1, 5, 4] 后面得到 [5, 4, 3, 2, 1, 5, 4, 3]
        • 2 拼接到 [5, 4, 3, 2, 1, 5, 4, 3] 后面得到 [5, 4, 3, 2, 1, 5, 4, 3, 2]
        • 最后 5 拼接到 [5, 4, 3, 2, 1, 5, 4, 3, 2] 后面得到 [5, 4, 3, 2, 1, 5, 4, 3, 2, 5, 4, 3, 5, 4, 5]
    • 输出:[5, 4, 3, 2, 1, 5, 4, 3, 2, 5, 4, 3, 5, 4, 5]

实现代码

python复制代码
	def construct_array(n):

	    result = []

	    for i in range(1, n + 1):

	        temp = []

	        for j in range(n, i - 1, -1):

	            temp.append(j)

	        result.extend(temp)

	    return result

	 

	# 测试样例

	print(construct_array(3))  # 输出: [3, 2, 1, 3, 2, 3]

	print(construct_array(4))  # 输出: [4, 3, 2, 1, 4, 3, 2, 4, 3, 4]

	print(construct_array(5))  # 输出: [5, 4, 3, 2, 1, 5, 4, 3, 2, 5, 4, 3, 5, 4, 5]

学习心得

  1. 理解题意

    • 首先,要清楚题目要求的是将数字从 n 到 i 逆序拼接,而不是直接拼接成一个完整的逆序数字。
  2. 分解步骤

    • 将问题分解为两个部分:

      • 从 n 到 i 的逆序数字生成。
      • 将生成的逆序数字逐个添加到结果数组中。
  3. 逻辑实现

    • 使用嵌套循环,外层循环控制从 1 到 n,内层循环控制从 n 到 i 的逆序数字生成。
    • 使用 append 和 extend 方法将数字添加到结果数组中。
  4. 调试和验证

    • 编写测试样例,确保代码的正确性。
    • 逐步调试,检查每一步的输出结果是否符合预期。
  5. 优化和扩展

    • 考虑是否有更高效的算法实现,例如通过字符串操作来简化拼接过程。
    • 扩展问题,考虑如果输入是字符串或其他类型数据,如何实现类似的功能。

通过以上步骤,我们不仅解决了问题,还学会了如何分解问题、实现逻辑、调试代码,并进行了优化和扩展的思考。