vector<int> printNumbers(int n){ if (n == 0) return res;
string num(n, '0'); for (int i = 0; i <= 9; i ++) { // 从高位到低位进行全排列 num[0] = i + '0'; permutationNums(num, n, 1); // 设置下一位 } return res; }
// 对数字全排列 voidpermutationNums(string& num, int length, int index){ if (index == length) { saveNum(num); // 存储结果 return; } for (int i = 0; i <= 9; i ++) { num[index] = i + '0'; // 设置第 index 位的字符 permutationNums(num, length, index + 1); } }
// 存储结果:只能存储前导非0的排列 voidsaveNum(string num){ string tempStr = ""; bool isBeginZero = true; for (int i = 0; i < num.length(); i ++) { if (isBeginZero && num[i] != '0') isBeginZero = false; if (!isBeginZero) tempStr += num[i]; } // 首字符为 0 时,tempStr 为空,不能执行 stoi if (tempStr != "") { int tempNum = stoi(tempStr); res.push_back(stoi(tempStr)); } } };