12 条题解
-
0
/* #include <iostream> #include <vector> using namespace std; // 递归函数,用于生成全排列 void permute(vector<int>& nums, size_t start, vector<vector<int>>& result) { if (start == nums.size() - 1) { //递归终止条件 result.push_back(nums); // 将当前排列加入结果 } else { for (size_t i = start; i < nums.size(); i++) { //从start位置开始遍历 //核心代码 ===》靠近终止条件 ==》 start+1 代表上一个位置被固定 //那start == nums.size() - 1 代表已经到最终位置了 swap(nums[start], nums[i]); // 交换元素使得每一个元素都在start位置试试 permute(nums, start + 1, result); // 递归生成排列 swap(nums[start], nums[i]); // 恢复原状 } } } int main() { int n; cin >> n; vector<int> nums(n); for (int i = 0; i < n; i++) { nums[i] = i + 1; // 初始化数组 } vector<vector<int>> result; // 存储所有排列 permute(nums, 0, result); // 生成全排列 // 输出所有排列 for (const vector<int>& perm : result) { for (int num : perm) { cout << num << " "; } cout << endl; } for ( size_t i = 0; i < result.size(); i++ ) { for ( size_t j = 0; j < result[i].size(); j++ ) { cout << result[i][j] << " "; } if(i != result.size() - 1) cout << endl; } return 0; } */ #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int n; cin >> n; vector<int> nums(n); for (int i = 0; i < n; i++) { nums[i] = i + 1; // 初始化数组 } // 使用 std::next_permutation 生成所有排列 //next_permutation 的作用是将一个序列(如数组或向量)重新排列,使其成为字典序中的下一个排列。 //如果当前序列已经是字典序中的最大排列(例如 321),那么它会将序列重置为最小排列(例如 123)。 do { for (int num : nums) { cout << num << " "; } cout << endl; } while (next_permutation(nums.begin(), nums.end())); return 0; }
信息
- ID
- 82
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 5
- 标签
- 递交数
- 729
- 已通过
- 294
- 上传者