当前位置: 首页 > news >正文

C/C++每日一练(20230226)

目录

 

17. 电话号码的字母组合

37. 解数独

51. N 皇后

52. N皇后 II

89. 格雷编码

90. 子集 II


17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

示例 1:

输入:digits = "23"
输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]

示例 2:

输入:digits = ""
输出:[]

示例 3:

输入:digits = "2"
输出:["a","b","c"]

提示:

  • 0 <= digits.length <= 4
  • digits[i] 是范围 ['2', '9'] 的一个数字。
#include <bits/stdc++.h>
using namespace std;class Solution
{
public:vector<string> result;vector<string> letterCombinations(string digits){string temp;if (digits.length() == 0)return result;getAns(digits, 0, temp, result);return result;}void getAns(string digits, int start, string temp, vector<string> &result){if (temp.size() == digits.length())result.push_back(temp);else{vector<char> let = getLet(digits[start]);for (int i = 0; i < let.size(); i++){temp.append(1, let[i]);getAns(digits, start + 1, temp, result);temp.pop_back();}}}vector<char> getLet(char i){vector<char> let;if (i == '2'){let.push_back('a');let.push_back('b');let.push_back('c');}else if (i == '3'){let.push_back('d');let.push_back('e');let.push_back('f');}else if (i == '4'){let.push_back('g');let.push_back('h');let.push_back('i');}else if (i == '5'){let.push_back('j');let.push_back('k');let.push_back('l');}else if (i == '6'){let.push_back('m');let.push_back('n');let.push_back('o');}else if (i == '7'){let.push_back('p');let.push_back('q');let.push_back('r');let.push_back('s');}else if (i == '8'){let.push_back('t');let.push_back('u');let.push_back('v');}else if (i == '9'){let.push_back('w');let.push_back('x');let.push_back('y');let.push_back('z');}return let;}
};int main()
{Solution s1;string digits = "23";for (auto comb : s1.letterCombinations(digits))cout << comb << " ";cout <<endl;Solution s2;digits = "";for (auto comb : s2.letterCombinations(digits))cout << comb << " ";cout <<endl;Solution s3;digits = "2";for (auto comb : s3.letterCombinations(digits))cout << comb << " ";return 0;
} 

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:unordered_map<char, string> map = {{'2', "abc"}, {'3', "def"}, {'4', "ghi"}, {'5', "jkl"}, {'6', "mno"}, {'7', "pqrs"}, {'8', "tuv"}, {'9', "wxyz"}};vector<string> res;void backtrack(string &s, int index, string cur){if (index == s.size()){res.push_back(cur);return;}for (int i = 0; i < map[s[index]].size(); ++i)backtrack(s, index + 1, cur + map[s[index]][i]);}vector<string> letterCombinations(string digits){if (digits.size() == 0)return res;string cur;backtrack(digits, 0, cur);return res;}
};int main()
{Solution s1;string digits = "23";for (auto comb : s1.letterCombinations(digits))cout << comb << " ";cout <<endl;Solution s2;digits = "";for (auto comb : s2.letterCombinations(digits))cout << comb << " ";cout <<endl;Solution s3;digits = "2";for (auto comb : s3.letterCombinations(digits))cout << comb << " ";return 0;
} 

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:vector<string> letterCombinations(string digits){if (digits.size() == 0)return {};map<char, string> a;a.insert(map<char, string>::value_type('2', "abc"));a.insert(map<char, string>::value_type('3', "def"));a.insert(map<char, string>::value_type('4', "ghi"));a.insert(map<char, string>::value_type('5', "jkl"));a.insert(map<char, string>::value_type('6', "mno"));a.insert(map<char, string>::value_type('7', "pqrs"));a.insert(map<char, string>::value_type('8', "tuv"));a.insert(map<char, string>::value_type('9', "wxyz"));int count = 1;for (int i = 0; i < digits.size(); i++){count *= a[digits[i]].size();}vector<string> res(count);count = 1;for (int i = 0; i < digits.size(); i++){int index = 0;vector<string> temp(res.begin(), res.begin() + count);for (int k = 0; k < count; k++){for (auto c : a[digits[i]]){res[index] = temp[k] + c;index++;}}count *= a[digits[i]].size();}return res;}
};int main()
{Solution s1;string digits = "23";for (auto comb : s1.letterCombinations(digits))cout << comb << " ";cout <<endl;Solution s2;digits = "";for (auto comb : s2.letterCombinations(digits))cout << comb << " ";cout <<endl;Solution s3;digits = "2";for (auto comb : s3.letterCombinations(digits))cout << comb << " ";return 0;
} 

37. 解数独

编写一个程序,通过填充空格来解决数独问题。

数独的解法需 遵循如下规则

  1. 数字 1-9 在每一行只能出现一次。
  2. 数字 1-9 在每一列只能出现一次。
  3. 数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。(请参考示例图)

数独部分空格内已填入了数字,空白格用 '.' 表示。

示例:

输入:

board = [["5","3",".",".","7",".",".",".","."],["6",".",".","1","9","5",".",".","."],[".","9","8",".",".",".",".","6","."],["8",".",".",".","6",".",".",".","3"],["4",".",".","8",".","3",".",".","1"],["7",".",".",".","2",".",".",".","6"],[".","6",".",".",".",".","2","8","."],[".",".",".","4","1","9",".",".","5"],[".",".",".",".","8",".",".","7","9"]]


输出:

    [["5","3","4","6","7","8","9","1","2"],["6","7","2","1","9","5","3","4","8"],["1","9","8","3","4","2","5","6","7"],["8","5","9","7","6","1","4","2","3"],["4","2","6","8","5","3","7","9","1"],["7","1","3","9","2","4","8","5","6"],["9","6","1","5","3","7","2","8","4"],["2","8","7","4","1","9","6","3","5"],["3","4","5","2","8","6","1","7","9"]]


解释:输入的数独如上图所示,唯一有效的解决方案如下所示:

 提示:

  • board.length == 9
  • board[i].length == 9
  • board[i][j] 是一位数字或者 '.'
  • 题目数据 保证 输入数独仅有一个解

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:void solveSudoku(vector<vector<char>> &board){Dfs(board, 0);}private:bool flag = false;void Dfs(vector<vector<char>> &board, int n){if (n > 0 && n <= 81)if (!JudgeIsNoWant(board, n - 1))return;if (n >= 81){flag = true;return;}int x = n / 9;int y = n % 9;if (board[x][y] != '.')Dfs(board, n + 1);else{for (int i = 1; i < 10; i++){board[x][y] = i + 48;Dfs(board, n + 1);if (flag == true)return;board[x][y] = '.';}}}bool JudgeIsNoWant(vector<vector<char>> &board, int n){int x = n / 9;int y = n % 9;for (size_t i = 0; i < 9; i++){if (board[x][i] == board[x][y] && i != y)return false;if (board[i][y] == board[x][y] && i != x)return false;}for (int i = x / 3 * 3; i < x / 3 * 3 + 3; i++)for (int j = y / 3 * 3; j < y / 3 * 3 + 3; j++)if (board[i][j] == board[x][y] && (i != x || j != y))return false;return true;}
};int main()
{Solution s;vector<vector<char>>board = {{'5','3','.','.','7','.','.','.','.'},{'6','.','.','1','9','5','.','.','.'},{'.','9','8','.','.','.','.','6','.'},{'8','.','.','.','6','.','.','.','3'},{'4','.','.','8','.','3','.','.','1'},{'7','.','.','.','2','.','.','.','6'},{'.','6','.','.','.','.','2','8','.'},{'.','.','.','4','1','9','.','.','5'},{'.','.','.','.','8','.','.','7','9'}};s.solveSudoku(board);for (auto sudoku : board){for (auto row : sudoku)cout << row << " ";cout <<endl;}return 0;
} 

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:void solveSudoku(vector<vector<char>> &board){int size = board.size();vector<vector<bool>> rows(size, vector<bool>(10));vector<vector<bool>> cols(size, vector<bool>(10));vector<vector<bool>> boxes(size, vector<bool>(10));for (int i = 0; i < size; i++){for (int j = 0; j < size; j++){if (board[i][j] != '.'){int num = board[i][j] - '0';int idx = i / 3 * 3 + j / 3;rows[i][num] = true;cols[j][num] = true;boxes[idx][num] = true;}}}dfs(board, 0, rows, cols, boxes);}
private:bool valid(int num, int row, int col, int idx, vector<vector<bool>> &rows,vector<vector<bool>> &cols, vector<vector<bool>> &boxes){return !rows[row][num] && !cols[col][num] && !boxes[idx][num];}bool dfs(vector<vector<char>> &board, int size, vector<vector<bool>> &rows,vector<vector<bool>> &cols, vector<vector<bool>> &boxes){if (size == 9 * 9){return true;}else{bool ok = false;int row = size / 9;int col = size % 9;int idx = row / 3 * 3 + col / 3;if (board[row][col] == '.'){for (int i = 1; i <= 9; i++){if (valid(i, row, col, idx, rows, cols, boxes)){board[row][col] = i + '0';rows[row][i] = true;cols[col][i] = true;boxes[idx][i] = true;ok = dfs(board, size + 1, rows, cols, boxes);if (!ok){rows[row][i] = false;cols[col][i] = false;boxes[idx][i] = false;board[row][col] = '.';}}}}else{ok = dfs(board, size + 1, rows, cols, boxes);}return ok;}}
};int main()
{Solution s;vector<vector<char>>board = {{'5','3','.','.','7','.','.','.','.'},{'6','.','.','1','9','5','.','.','.'},{'.','9','8','.','.','.','.','6','.'},{'8','.','.','.','6','.','.','.','3'},{'4','.','.','8','.','3','.','.','1'},{'7','.','.','.','2','.','.','.','6'},{'.','6','.','.','.','.','2','8','.'},{'.','.','.','4','1','9','.','.','5'},{'.','.','.','.','8','.','.','7','9'}};s.solveSudoku(board);for (auto sudoku : board){for (auto row : sudoku)cout << row << " ";cout <<endl;}return 0;
} 

以下代码错?不显示结果,输出起始board

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:int row[9][9], col[9][9], block[9][9];void solveSudoku(vector<vector<char>> &board){for (int i = 0; i < 9; ++i){for (int j = 0; j < 9; ++j){if (board[i][j] == '.')continue;int num = board[i][j] - '1';row[i][num] = col[j][num] = block[i / 3 * 3 + j / 3][num] = 1;}}dfs(board, 0, 0);}bool dfs(vector<vector<char>> &board, int r, int c){if (r > 8)return true;if (board[r][c] == '.'){for (int i = 0; i < 9; ++i){if (row[r][i] || col[c][i] || block[r / 3 * 3 + c / 3][i])continue;board[r][c] = i + 1 + '0';row[r][i] = col[c][i] = block[r / 3 * 3 + c / 3][i] = 1;if (dfs(board, r + (c + 1) / 9, (c + 1) % 9))return true;board[r][c] = '.';row[r][i] = col[c][i] = block[r / 3 * 3 + c / 3][i] = 0;}}elsereturn dfs(board, r + (c + 1) / 9, (c + 1) % 9);return false;}
};int main()
{Solution s;vector<vector<char>>board = {{'5','3','.','.','7','.','.','.','.'},{'6','.','.','1','9','5','.','.','.'},{'.','9','8','.','.','.','.','6','.'},{'8','.','.','.','6','.','.','.','3'},{'4','.','.','8','.','3','.','.','1'},{'7','.','.','.','2','.','.','.','6'},{'.','6','.','.','.','.','2','8','.'},{'.','.','.','4','1','9','.','.','5'},{'.','.','.','.','8','.','.','7','9'}};s.solveSudoku(board);for (auto sudoku : board){for (auto row : sudoku)cout << row << " ";cout <<endl;}return 0;
} 

51. N 皇后

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回所有不同的 n 皇后问题 的解决方案。

每一种解法包含一个不同的 n 皇后问题 的棋子放置方案,该方案中 'Q' 和 '.' 分别代表了皇后和空位。

示例 1:

输入:n = 4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入:n = 1
输出:[["Q"]]

提示:

  • 1 <= n <= 9
  • 皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。
#include <bits/stdc++.h>
using namespace std;class Solution
{
public:vector<vector<string>> solveNQueens(int n){vector<vector<string>> res;vector<int> stack(n);vector<string> solution(n, string(n, '.'));dfs(n, 0, stack, solution, res);return res;}private:void dfs(int n, int row, vector<int> &stack, vector<string> &solution, vector<vector<string>> &res){if (row == n){res.push_back(solution);}else{for (int i = 0; i < n; i++){if (row == 0 || !conflict(stack, row, i)){solution[row][i] = 'Q';stack[row] = i;dfs(n, row + 1, stack, solution, res);solution[row][i] = '.';}}}}bool conflict(vector<int> &stack, int row, int col){for (int i = 0; i < row; i++){if (col == stack[i] || abs(row - i) == abs(col - stack[i])){return true;}}return false;}
};int main()
{Solution s;int i = 0;for (auto res : s.solveNQueens(4)){cout << ++i << endl;for (auto item : res)cout << item << " ";cout << endl;}cout << endl;return 0;
} 

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:vector<vector<string>> res;vector<vector<string>> solveNQueens(int n){vector<string> board(n, string(n, '.'));backtrack(board, 0);return res;}void backtrack(vector<string> &board, int row){if (row == board.size()){res.push_back(board);return;}int n = board[row].size();for (int col = 0; col < n; col++){if (!isValid(board, row, col)){continue;}board[row][col] = 'Q';backtrack(board, row + 1);board[row][col] = '.';}}bool isValid(vector<string> &board, int row, int col){int n = board.size();for (int i = 0; i < row; i++){if (board[i][col] == 'Q'){return false;}}for (int i = row - 1, j = col + 1; i >= 0 && j < n; i--, j++){if (board[i][j] == 'Q'){return false;}}for (int i = row - 1, j = col - 1; i >= 0 && j >= 0; i--, j--){if (board[i][j] == 'Q'){return false;}}return true;}
};int main()
{Solution s;int i = 0;for (auto res : s.solveNQueens(4)){cout << ++i << endl;for (auto item : res)cout << item << " ";cout << endl;}cout << endl;return 0;
} 

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:bool isValue(vector<int> &pos, int row, int col){for (int i = 0; i < row; ++i){if (col == pos[i] || abs(row - i) == abs(col - pos[i]))return false;}return true;}void solveNQueensDFS(vector<int> &pos, int row, vector<vector<string>> &ans){int n = pos.size();if (row == n){vector<string> tmp(n, string(n, '.'));for (int i = 0; i < n; ++i)tmp[i][pos[i]] = 'Q';ans.push_back(tmp);}else{for (int col = 0; col < n; ++col){if (isValue(pos, row, col)){pos[row] = col;solveNQueensDFS(pos, row + 1, ans);pos[row] = -1;}}}}vector<vector<string>> solveNQueens(int n){vector<int> pos(n, -1);vector<vector<string>> ans;solveNQueensDFS(pos, 0, ans);return ans;}
};int main()
{Solution s;int i = 0;for (auto res : s.solveNQueens(4)){cout << ++i << endl;for (auto item : res)cout << item << " ";cout << endl;}cout << endl;return 0;
} 

52. N皇后 II

n 皇后问题 研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。

示例 1:

输入:n = 4
输出:2
解释:如上图所示,4 皇后问题存在两个不同的解法。

示例 2:

输入:n = 1
输出:1

提示:

  • 1 <= n <= 9
  • 皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:int totalNQueens(int n){vector<int> stack(n);return dfs(n, 0, stack);}private:int dfs(int n, int row, vector<int> &stack){int count = 0;if (row == n){return count + 1;}else{for (int i = 0; i < n; i++){if (row == 0 || !conflict(stack, row, i)){stack[row] = i;count += dfs(n, row + 1, stack);}}return count;}}bool conflict(vector<int> &stack, int row, int col){for (int i = 0; i < row; i++){if (col == stack[i] || abs(row - i) == abs(col - stack[i])){return true;}}return false;}
};int main()
{Solution s;cout << s.totalNQueens(1) << endl;cout << s.totalNQueens(4) << endl;cout << s.totalNQueens(8) << endl;return 0;
} 

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:bool isvalid(vector<string> &temp, int i, int j){ //判断棋盘是否有效//for (int k = 0; k<temp[i].size(); ++k){//判断行。不用判断行了,每行放一个之后就会递归到下一行了//	if (temp[i][k] == 'Q') return false;//}for (int k = 0; k < i; ++k){ //判断列if (temp[k][j] == 'Q')return false;}for (int p = i - 1, q = j - 1; p >= 0 && q >= 0; --p, --q){ //判断左上对角线if (temp[p][q] == 'Q')return false;}for (int p = i - 1, q = j + 1; p >= 0 && q < temp.size(); --p, ++q){ //判断右上对角线if (temp[p][q] == 'Q')return false;}return true;}int dfs(int &count, vector<string> &temp, int i, int n){if (i == n)return ++count;for (int j = 0; j < n; ++j){if (isvalid(temp, i, j)){temp[i][j] = 'Q'; //递归前修改dfs(count, temp, i + 1, n);}temp[i][j] = '.'; //递归后恢复}return count;}int totalNQueens(int n){int count = 0;string aa;for (int i = 0; i < n; ++i)aa += '.';vector<string> temp(n, aa);return dfs(count, temp, 0, n);}
};int main()
{Solution s;cout << s.totalNQueens(1) << endl;cout << s.totalNQueens(4) << endl;cout << s.totalNQueens(8) << endl;return 0;
} 

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:void recurse(vector<string> solution, int pos, vector<vector<bool>> validPos, int &result){int n = solution[0].size();if (pos == n){result++;return;}for (int i = 0; i < n; i++){if (!validPos[pos][i])continue;vector<vector<bool>> newPos = validPos;for (int j = pos; j < n; j++){newPos[j][i] = false;if (i - j + pos >= 0)newPos[j][i - j + pos] = false;if (i + j - pos < n)newPos[j][i + j - pos] = false;}solution[pos][i] = 'Q';recurse(solution, pos + 1, newPos, result);solution[pos][i] = '.';}return;}int totalNQueens(int n){int result = 0;vector<string> solution(n, string(n, '.'));vector<vector<bool>> validPos = vector<vector<bool>>(n, vector<bool>(n, true));recurse(solution, 0, validPos, result);return result;}
};int main()
{Solution s;cout << s.totalNQueens(1) << endl;cout << s.totalNQueens(4) << endl;cout << s.totalNQueens(8) << endl;return 0;
} 

89. 格雷编码

格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。

给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。

格雷编码序列必须以 0 开头。

示例 1:

输入: 2
输出: [0,1,3,2]
解释:00 - 001 - 111 - 310 - 2对于给定的 n,其格雷编码序列并不唯一。例如,[0,2,3,1] 也是一个有效的格雷编码序列。00 - 010 - 211 - 301 - 1

示例 2:

输入: 0
输出: [0]
解释: 我们定义格雷编码序列必须以 0 开头。给定编码总位数为 n 的格雷编码序列,其长度为 2^n。当 n = 0 时,长度为 2^0 = 1。因此,当 n = 0 时,其格雷编码序列为 [0]。
#include <bits/stdc++.h>
using namespace std;class Solution
{
public:vector<int> grayCode(int n){int size = 1 << n;vector<int> res;for (int i = 0; i < size; i++){int graycode = i ^ (i >> 1);res.push_back(graycode);}return res;}
};int main()
{Solution s;vector<int> res = s.grayCode(2);copy(res.begin(), res.end(), ostream_iterator<int>(cout," "));cout << endl;res = s.grayCode(0);copy(res.begin(), res.end(), ostream_iterator<int>(cout," "));return 0;
} 
#include <bits/stdc++.h>
using namespace std;class Solution
{
public:vector<int> grayCode(int n){vector<int> res;for (int i = 0; i < (int)pow(2, n); i++)res.push_back(i ^ (i >> 1));return res;}
};int main()
{Solution s;vector<int> res = s.grayCode(2);copy(res.begin(), res.end(), ostream_iterator<int>(cout," "));cout << endl;res = s.grayCode(0);copy(res.begin(), res.end(), ostream_iterator<int>(cout," "));return 0;
} 

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:vector<int> grayCode(int n){vector<int> res;res.push_back(0);if (n == 0)return res;int head = 1;for (int i = 0; i < n; i++){for (int j = res.size() - 1; j >= 0; j--){res.push_back(head + res[j]);}head <<= 1;}return res;}
};int main()
{Solution s;vector<int> res = s.grayCode(2);copy(res.begin(), res.end(), ostream_iterator<int>(cout," "));cout << endl;res = s.grayCode(0);copy(res.begin(), res.end(), ostream_iterator<int>(cout," "));return 0;
} 

90. 子集 II

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

示例 1:

输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:vector<vector<int>> subsetsWithDup(vector<int> &nums){vector<vector<int>> result;vector<int> item;set<vector<int>> rset;result.push_back(item);sort(nums.begin(), nums.end());CreatSet(0, result, item, nums, rset);return result;}void CreatSet(int i, vector<vector<int>> &result,vector<int> &item, vector<int> &nums,set<vector<int>> &rset){if (i >= nums.size())return;item.push_back(nums[i]);if (rset.find(item) == rset.end()){rset.insert(item);result.push_back(item);}CreatSet(i + 1, result, item, nums, rset);item.pop_back();CreatSet(i + 1, result, item, nums, rset);}
};int main()
{Solution s;vector<int> nums = {1,2,2};vector<vector<int>> res = s.subsetsWithDup(nums);for (auto r:res){copy(r.begin(), r.end(), ostream_iterator<int>(cout, " "));cout << endl;}return 0;
} 

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:vector<vector<int>> subsetsWithDup(vector<int> &nums){sort(nums.begin(), nums.end());vector<vector<int>> res;vector<int> cur;for (int i = 0; i <= nums.size(); i++){dfs(res, cur, nums, 0, i);}return res;}void dfs(vector<vector<int>> &res, vector<int> &cur, vector<int> &nums, int begin, int n){if (cur.size() == n){res.push_back(cur);return;}for (int i = begin; i < nums.size(); i++){if (i > begin && nums[i] == nums[i - 1])continue;cur.push_back(nums[i]);dfs(res, cur, nums, i + 1, n);cur.pop_back();}return;}
};int main()
{Solution s;vector<int> nums = {1,2,2};vector<vector<int>> res = s.subsetsWithDup(nums);for (auto r:res){copy(r.begin(), r.end(), ostream_iterator<int>(cout, " "));cout << endl;}return 0;
} 

#include <bits/stdc++.h>
using namespace std;class Solution
{
public:vector<vector<int>> ans;vector<int> cur;vector<int> v;void dfs(int depth){ans.push_back(cur);if (depth == v.size())return;for (int i = depth; i < v.size(); ++i){if (i > depth && v[i] == v[i - 1])continue;cur.push_back(v[i]);dfs(i + 1);cur.pop_back();}}vector<vector<int>> subsetsWithDup(vector<int> &nums){sort(nums.begin(), nums.end());v = nums;dfs(0);return ans;}
};string VectorToString(vector<int> vec, string split=",")
{if (vec.size()==0) return "[]";string res = "[";for (auto n:vec)res += to_string(n) + split;return res.substr(0, res.length() - split.size()) + "]";
}int main()
{Solution s;vector<int> nums = {1,2,2};vector<vector<int>> res = s.subsetsWithDup(nums);for (auto r:res){cout << VectorToString(r) << " ";}return 0;
} 

相关文章:

C/C++每日一练(20230226)

目录 17. 电话号码的字母组合 37. 解数独 51. N 皇后 52. N皇后 II 89. 格雷编码 90. 子集 II 17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电…...

Vue 3第二章:Vite文件目录结构及SFC语法

文章目录1. Vite 文件目录结构2. Vue3 SFC 语法规范介绍1. Vite 文件目录结构 Vue3 并没有强制规定文件目录结构&#xff0c;开发者可以按照自己喜欢的方式组织代码。不过&#xff0c;通常情况下&#xff0c;我们会按照以下方式组织文件目录&#xff1a; ├── public │ …...

Leetcode 剑指 Offer II 016. 不含重复字符的最长子字符串

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的最长…...

TCP 的演化史-sack 与 reordering metric

就着 TCP 本身说事&#xff0c;而不是高谈阔论关于它是如何不合时宜&#xff0c;然后摆出一个更务虚的更新。 从一个 case 开始。 按照现在 Linux TCP(遵守 RFC) 实现&#xff0c;以下是一个将会导致 reordering 更新的 sack 序列&#xff1a; 考虑一种情况&#xff0c;这两个…...

【Spring6】| Spring的入门程序、集成Log4j2日志框架

目录 一&#xff1a;Spring的入门程序 1. Spring的下载 2. Spring的jar文件 3. 第一个Spring程序 4. 第一个Spring程序详细剖析 5. Spring6启用Log4j2日志框架 一&#xff1a;Spring的入门程序 1. Spring的下载 官网地址&#xff1a;https://spring.io/ 官网地址&…...

包子凑数(完全背包)

小明几乎每天早晨都会在一家包子铺吃早餐。 他发现这家包子铺有 N 种蒸笼&#xff0c;其中第 i种蒸笼恰好能放 Ai 个包子。 每种蒸笼都有非常多笼&#xff0c;可以认为是无限笼。 每当有顾客想买 X 个包子&#xff0c;卖包子的大叔就会迅速选出若干笼包子来&#xff0c;使得这若…...

Spring超级全家桶,学完绝对是惊艳面试官的程度

前言Spring框架自2002年诞生以来一直备受开发者青睐&#xff0c;它包括SpringMVC、SpringBoot、Spring Cloud、Spring Cloud Dataflow等解决方案。有人亲切的称之为&#xff1a;Spring 全家桶。很多研发人员把spring看作心目中最好的java项目&#xff0c;没有之一。所以这是重点…...

Redis主要数据类型

Redis 是一个数据结构服务器。 Redis 的核心是提供一系列本机数据类型&#xff0c;可帮助您解决从缓存到队列再到事件处理的各种问题Redis主要数据类型&#xff1a;String&#xff08;字符串&#xff09;&#xff0c;Lists&#xff08;列表&#xff09;&#xff0c;Sets&#x…...

【Linux | ELK 8.2】搭建ELKB集群Ⅰ—— 实验环境说明和搭建Elasticsearch集群

目录1. 实验环境1.1 实验工具1.2 操作系统1.3 架构版本、IP地址规划与虚拟机配置要求1.4 拓扑图1.5 其他要求2. 实验步骤2.1 安装Elasticsearch&#xff08;单节点&#xff09;&#xff08;1&#xff09;检查系统jdk版本&#xff08;2&#xff09;下载elasticsearch&#xff08…...

不同情况下*p和*p的区别(指针)

一说到指针&#xff0c;不少同学就会觉得云里雾里。首先要明白&#xff0c;指针和地址是一个概念&#xff1b;然后明白指针和指针变量的区别。先理解地址和数据&#xff0c;想象内存里面是一个个的小盒子&#xff0c;每个盒子对应一个编号&#xff0c;这个编号就是地址&#xf…...

Vuex基础语法

Vuex vuex官网 文章目录Vuexvuex的工作原理图2.vuex的环境搭建3.vuex的使用1.actons2. mutations3.getters4.vuex中的map映射属性4.1 mapState和mapGetters4.2 mapMutations和mapActions5.vuex多组件通信1.通过计算属性获得2.通过mapState获得6.vuex模块化和命名空间6.1模块化…...

刚上岸字节测试开发岗,全网最真实的大厂面试真题

首先我来解释一下为什么说是全网最真实的面试题&#xff0c;相信大家也发现软件测试面试题在网上流传也已不少&#xff0c;但是经过仔细查看发现了两个很重要的问题。 第一&#xff0c;网上流传的面试题的答案并不能保证百分百正确。也就是说各位朋友辛辛苦苦花了很多时间准备…...

Mac监控键盘输入并执行动作

最新内容在我的另一个博客&#xff1a;Mac监控键盘输入并执行动作 背景 电脑的安全是非常重要的&#xff0c;特别是里面的敏感数据&#xff0c;若是被有心之人利用&#xff0c;那后果不堪设想。 所以我们部门定下了一个规矩&#xff0c;谁离开工位要是不锁屏&#xff0c;就可以…...

Transformer输出张量的值全部相同?!

Transformer输出张量的值全部相同&#xff1f;&#xff01;现象原因解决现象 输入经过TransformerEncoderLayer之后&#xff0c;基本所有输出都相同了。 核心代码如下&#xff0c; from torch.nn import TransformerEncoderLayer self.trans TransformerEncoderLayer(d_mode…...

港科夜闻|全国政协副主席梁振英先生率香港媒体高管团到访香港科大(广州)...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、全国政协副主席梁振英先生率香港媒体高管团到访香港科大(广州)。2月21日下午&#xff0c;在全国政协副主席、广州南沙粤港合作咨询委员会顾问梁振英先生的带领下&#xff0c;香港20余家媒体的高管及知名媒体人士到访香港科大…...

XML调用 CAPL Test Function

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…...

Linux网络配置(NAT)

在搭配好一台虚拟机的时候想要下载&#xff0c;安装些什么但一直失败这个时候就可以检查一下网络是否连接这里我们使用centos7举例子使用命令——ifconfig由此可见我们的系统中目前有3个网卡ens33——用于接入外网&#xff0c;该网卡默认关闭lo——用于访问本地网络&#xff0c…...

数据结构——第二章 线性表(8)——线性表总结

线性表总结 线性表是线性结构的基本形式&#xff0c;用于描述一组同类型而具有1:1线性关系的数据对象。将此类数据对象存放在计算机的内存中时&#xff0c;必须考虑数据元素的存放和数据元素之间关系的存放。常用的存储结构有顺序存结构和链式结构。 顺序表存储特点是用一维数…...

3.7寸按键翻页工牌

产品参数 产品型号 ESL_BWR3.7_BLE 产品尺寸 (mm) 62.51066.5 显示技术 E ink 显示区域 (mm) 47.32(H)81.12(V) 分辨率 (像素) 280480 像素尺寸(mm) 0.1690.169 150dpi 显示颜色 黑/白 视觉角度 180 工作温度 0℃ - 50℃ 电池 500mAh ( Type-C 充电…...

西北工业大学大学物理(II)选填解析2019-2020期末

2 又是考查“一个电子和一个光子具有相同的波长&#xff0c;则二者动量相等。”4 斯特恩盖拉赫实验&#xff0c;原子的自旋磁矩取向量子化。7 通常我们感受不到电子的波动性。因为其波长短&#xff0c;其实也就是粒子运动速率高。10 考查无限长直导线周围B分布。常见的模型要记…...

[计算机网络(第八版)]第一章 概述(章节测试/章节作业)

随堂作业 练习版(无答案版) 1.2 因特网概述 1【单选题】因特网的前身是1969年创建的第一个分组交换网 A、internetB、InternetC、NSFNETD、ARPANET 2【单选题】因特网采用的核心技术是 A、TCP/IPB、局域网技术C、远程通信技术D、光纤技术 1.3 三种交换方式&#xff1a;电路…...

华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典

文章目录2023 年用 Python 语言解华为 OD 机试题&#xff0c;一篇博客找全。华为 OD 机试题清单&#xff08;机试题库还在逐日更新&#xff09;2023 年用 Python 语言解华为 OD 机试题&#xff0c;一篇博客找全。 在 2023 年&#xff0c;Python 已成为广泛使用的编程语言之一&…...

电子科技大学数据库与软件工程三

适用于网工和物联网专业 目录 一、实验目的 二、实验内容 三、实验软件 四、实验步骤及数据记录 1.子查询 2. 伪列 3.数据库对象 4. 块、存储过程和触发器 五、实验结论及思考题 实验结论&#xff1a; 思考题&#xff1a; 六、总结及心得体会 七、对本实验过程及方…...

华为开源自研AI框架昇思MindSpore数据变换:Transforms

目录一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例二、数据变换 TransformsCommon TransformsComposeVision TransformsRescaleNormalizeHWC2CWHText TransformsBasicTokenizerLookupLambda Transforms通常情况下&#xff0c;直接加载的原始数据并不能直接送入…...

软件测试之边界值测试法

边界值测试法 1. 介绍 边界值分析法就是对输入或输出边界值进行测试的,也是一种黑盒测试. 边界值分析法通常作为等价类划分法的补充,其测试用例来自等价类的边界;长期的经验得知,大量的错误是发现在输入或输出范围的边界上&#xff0c;而不是发生再输入输出范围的内部&#…...

【华为OD机试模拟题】用 C++ 实现 - 最近的点(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明最近的点题目输入输出示例一输入输出Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。 华为 OD 清单查看地址…...

Qt windeployqt.exe 打包qml

Qt系列文章目录 文章目录Qt系列文章目录前言一、遇到的坑二、参考前言 我们在QtCreator下面开发程序&#xff0c;一般都会遇到工程发布给客户使用的情况。我们通常会使用Qt自带的打包工具&#xff1a;windeployqt.exe。 windeployqt.exe是Qt自带的工具&#xff0c;用于创建应用…...

【人脸识别】CurricularFace:自适应课程学习人脸识别损失函数

论文题目&#xff1a;《CurricularFace: Adaptive Curriculum Learning Loss for Deep Face Recognition》 论文地址&#xff1a;https://arxiv.org/pdf/2004.00288v1.pdf 代码地址&#xff1a;https://github.com/HuangYG123/CurricularFace 建议先了解下这篇文章&#xff1a…...

springmvc之rest风格(RESTFUL)

目录 一、介绍 1.什么是REST&#xff1f; 2.REST的实质 3.REST风格的优点 4.REST风格的缺点 3.什么是RESTful&#xff1f; 二、代码理解 一、介绍 1.什么是REST&#xff1f; 答&#xff1a;REST&#xff08;Representational State Transfer&#xff09; ,表现形式转…...

django项目实战十四(django+bootstrap实现增删改查)进阶混合数据使用modelform上传

目录 一、启用media 1、URL设置 2、settings.py配置 二、url 三、upload.py 新增upload_modelform方法 四、form.py新增UpModelForm 五、创建city表 六、创建city_list.html 接上一篇《django项目实战十三&#xff08;djangobootstrap实现增删改查&#xff09;进阶混合数据f…...