关岭网站建设,漳州公司建设网站,用WordPress注册无响应,代理一款网页游戏需要多少钱文章目录 无重复字符串的排列组合员工的重要性图像渲染被围绕的区域 无重复字符串的排列组合 无重复字符串的排列组合。编写一种方法#xff0c;计算某字符串的所有排列组合#xff0c;字符串每个字符均不相同。 class Solution {
public:void DFS(string s,vectors… 文章目录 无重复字符串的排列组合员工的重要性图像渲染被围绕的区域 无重复字符串的排列组合 无重复字符串的排列组合。编写一种方法计算某字符串的所有排列组合字符串每个字符均不相同。 class Solution {
public:void DFS(string s,vectorstringdfs,int i){if(is.size())dfs.push_back(s);else{//注意 j 的下标从 i 开始因为原排列也是一种排列for (int j i; j s.length(); j){swap(s[i], s[j]); //交换字母DFS(s, dfs, i 1);swap(s[i], s[j]); //还原}}}vectorstring permutation(string S) {vectorstring res;DFS( S,res, 0);return res;}
};员工的重要性 给定一个保存员工信息的数据结构它包含了员工唯一的 id重要度和直系下属的id比如员工1是员工2的领导员工2 是员工3 的领导。他们相应的重要度为 15,10,5。那么员工1的数据结构是[1,15,[2]]员工2的 数据结构是 2, 10,[3]]员工3 的数据结构是[3,5,。注意虽然员工3 也是员工1的一个下属但是由于并不是直系下属因此没有体现在员工1的数据结构中。 现在输入一个公司的所有员工信息以及单个员工id返回这个员工和他所有下属的重要度之和 class Solution {
public:int DFS(vectorEmployee* employees,int id){int sum0;//先遍历数组employees[],for(auto e : employees){ //确定是哪个idif(e-idid){//将importance的值先赋值给sum最后都会递归返回sume-importance;//这里遍历subordinates依次遍历for (auto n : e-subordinates) {sum DFS(employees, n);}}}return sum;}int getImportance(vectorEmployee* employees, int id) {return DFS(employees,id);}
};图像渲染 有一幅以 m x n 的二维整数数组表示的图画 image 其中 image[i][j] 表示该图画的像素值大小。 你也被给予三个整数 sr , sc 和 newColor 。你应该从像素 image[sr][sc] 开始对图像进行 上色填充 。 为了完成 上色工作 从初始像素开始记录初始坐标的 上下左右四个方向上 像素值与初始坐标相同的相连像素点接着再记录这四个方向上符合条件的像素点与他们对应 四个方向上 像素值与初始坐标相同的相连像素点……重复该过程。将所有有记录的像素点的颜色值改为 newColor 。 最后返回 经过上色渲染后的图像 。 class Solution {
public:int dfs[4][2]{{1,0},{-1,0},{0,1},{0,-1}};void DFS(vectorvectorint image, int sr, int sc, int color,vectorvectorint sign,int row,int col,int oldcolor){//渲染并做标记image[sr][sc]color;sign[sr][sc]1;//遍历sr,sc坐标的四个方向for(int i0;i4;i){int newsrsrdfs[i][0];int newscscdfs[i][1];//判断越界if(newsrrow||newsr0||newsccol||newsc0)continue;if(image[newsr][newsc]oldcolorsign[newsr][newsc]0){DFS(image,newsr,newsc,color,sign,row,col,oldcolor);}}}vectorvectorint floodFill(vectorvectorint image, int sr, int sc, int color) {if(image.empty())return image;int rowimage.size();int colimage[0].size();int oldcolorimage[sr][sc];//这里的oldcolor是必须要传的因为只有和image[sr][sc];相等的数才会被渲染vectorvectorint sign(row,vectorint(col,0));//上面的数组用于标记以防重复遍历DFS(image,sr,sc,color,sign,row,col,oldcolor);return image;}
};被围绕的区域 给你一个 m x n 的矩阵 board 由若干字符 ‘X’ 和 ‘O’ 找到所有被 ‘X’ 围绕的区域并将这些区域里所有的 ‘O’ 用 ‘X’ 填充。 思路该题是和上一道题的解题步骤有一部分相似该题是让找出被X包围的O所以现在就先找出没有被包围的O做好标记而O的四个方向也会被连起来导致不会被包围。标记的作用也是为了反复查找。 class Solution {
public:int next[4][2]{{1,0},{-1,0},{0,1},{0,-1}};void DFS(vectorvectorchar board,int row,int col,int curX,int curY){//先将没有被包围的O进行标记也是防止重复递归board[curX][curY]A;for(int i0;i4;i){int newsrcurXnext[i][0];int newsccurYnext[i][1];//判断越界if(newsrrow||newsr0||newsccol||newsc0)continue;//挨着的O也是属于没有被包围的if(board[newsr][newsc]O)DFS(board,row,col,newsr,newsc);}}void solve(vectorvectorchar board) {int rowboard.size();int colboard[0].size();//判断第一行和最后一行是否有Ofor(int j0;jcol;j){if(board[0][j]O)DFS(board,row,col,0,j);if(board[row-1][j]O)DFS(board,row,col,row-1,j);}//判断第一列和最后一列是否有Ofor(int i0;irow;i){if(board[i][0]O)DFS(board,row,col,i,0);if(board[i][col-1]O)DFS(board,row,col,i,col-1);}//最后将A改回O,就是没有被包围的将O改为X就是将包围的改为Xfor(int i0;irow;i){for(int j0;jcol;j){if(board[i][j]O)board[i][j]X;if(board[i][j]A)board[i][j]O;}}}
};