「C++小例子」全排列【001】
Part1題目
全排列
用1、2、3三個數(shù)字
可以組成多少個沒有重復數(shù)字的三位數(shù)?
打印出所有的可能
Part2解答
參考Demo - C++
#include <iostream>
#include <vector>
using namespace std;
vector<int> temp; // 臨時保存已經(jīng)選擇的數(shù)
// backtracking:回溯
void backtracking(vector<vector<int> > &res, vector<bool> &isused, vector<int> &nums)
{
// 當temp數(shù)組的長度等于期望數(shù)組的長度時 return
if (temp.size() == nums.size())
{
res.push_back(temp);
return;
}
// 遍歷所有選擇
for (int i = 0; i < nums.size(); ++i)
{
// 對沒有選擇過的元素再進行抉擇:選擇它|不選擇它
if (isused[i])
{
// 選擇該元素 選擇后標記該元素為已選擇 同時進行下一元素的抉擇
temp.push_back(nums[i]);
isused[i] = false;
backtracking(res, isused, nums);
// 回復原來狀態(tài):未選擇 同時從temp中pop出
isused[i] = true;
temp.pop_back();
}
}
}
// permute:返回nums數(shù)組構成的全排列
vector<vector<int> > permute(vector<int> &nums)
{
vector<vector<int> > res;
vector<bool> isused(nums.size(), true);
backtracking(res, isused, nums);
return res;
}
// 主函數(shù)
int main()
{
// 初始化nums=[1,2,3]
vector<int> nums;
for (int i = 1; i <= 3; ++i)
{
nums.push_back(i);
}
// 結果返回值
vector<vector<int> > ans;
ans = permute(nums);
// 打印結果
for (int i = 0; i < ans.size(); ++i)
{
for (int j = 0; j < ans[i].size(); ++j)
{
cout << ans[i][j] << " ";
}
cout << endl;
}
return 0;
}
運行結果

運行環(huán)境
Visual Studio Code
Part3結語
難度:medium
歡迎小伙伴們提供其余的解法
這里海轟提供的代碼僅供參考,希望對您有所幫助,如有錯誤歡迎小伙伴指正~
我是海轟?(?ˊ?ˋ)?,如果您覺得寫得可以的話,請點個贊吧
謝謝支持??
評論
圖片
表情
