12 条题解

  • 0
    @ 1 个月前
    /*
    #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
    上传者