问题描述
小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到n,控制i的值。
- 内层循环:从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;
}
代码解析
- 初始化结果数组:我们使用一个
vector<int>来存储最终的结果。 - 外层循环:我们使用一个从1到n的循环来控制i的值。
- 内层循环:对于每个i,我们使用一个从n到i的逆序循环来添加数字到结果数组中。
- 返回结果:最后,我们返回构建好的数组。