构造特定数组的逆序拼接——题目解析及实现

217 阅读2分钟

问题描述

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

输入与输出

  • 输入:一个整数n。
  • 返回:一个整数数组,表示按照规则拼接后的数组。

测试样例

  • 样例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]。

解题思路

这个问题的关键在于理解数组的逆序拼接规则,并使用两层循环来实现这个规则。

  1. 外层循环:从1到n,控制i的值。
  2. 内层循环:从n到i,逆序添加数字到结果数组中。

代码实现

#include <vector>
#include <iostream>
using namespace std;

vector<int> solution(int n) {
    vector<int> result;
    
    // 外层循环,从1到n
    for (int i = 1; i <= n; ++i) {
        // 内层循环,从n到i,逆序添加数字
        for (int j = n; j >= i; --j) {
            result.push_back(j);
        }
    }
    return result;
}

int main() {
    vector<int> result1 = solution(3);
    cout << (result1 == vector<int>{3, 2, 1, 3, 2, 3}) << endl;

    vector<int> result2 = solution(4);
    cout << (result2 == vector<int>{4, 3, 2, 1, 4, 3, 2, 4, 3, 4}) << endl;

    vector<int> result3 = solution(5);
    cout << (result3 == vector<int>{5, 4, 3, 2, 1, 5, 4, 3, 2, 5, 4, 3, 5, 4, 5}) << endl;

    return 0;
}

代码解析

  1. 初始化结果数组:我们使用一个vector<int>来存储最终的结果。
  2. 外层循环:我们使用一个从1到n的循环来控制i的值。
  3. 内层循环:对于每个i,我们使用一个从n到i的逆序循环来添加数字到结果数组中。
  4. 返回结果:最后,我们返回构建好的数组。