LeetCode_Dec_1st_Week
Posted KuoGavin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode_Dec_1st_Week相关的知识,希望对你有一定的参考价值。
December 6th : 1816. 截断句子
December 7th : 1034. 边界着色
December 6th : 1816. 截断句子
今天我就24周岁啦!承蒙厚爱~ ,得到了人生中的第一个乐高模型,许愿今后能开起不差的B级车吧~💪💪💪!感谢亲爱的!刷个题助助兴 ~
读过题,单词间是固定单个空格的,那么就记录还剩余多少单词没有加上,同时维护窗口,窗口的左右字符都是空格,则说明是一个单词。这样遍历整个输入字符串,然后截取出前k个单词,并拼接成字符串返回即可。
class Solution
public:
string truncateSentence(string s, int k)
string ret;
for(int i = 0; i < s.size(); ++i)
if(s[i] == ' ') continue;
if(k == 0) break; //单词截取完了
int l = i, r = i; //窗口左右边界
while(r < s.size() && s[r] != ' ') r++; //没遇到空格,则扩大窗口
for(int j = i; j < r; ++j) ret += s[j]; //把窗口中单词加到结果字符串上
k--; i = r; //更新剩余单词数,同时更新i的值,以作为新的窗口的初始化值
if(k != 0) ret += " "; //如果不是末尾单词,要加上空格作为分隔符
return ret;
;
December 7th : 1034. 边界着色
将连通集的边界(网格边界,和不同颜色的边界)染成指定的颜色。就相当于小岛的题,使用dfs或者bfs均可。这里使用dfs,其中如何求得边界是关键,当dfs到网格边界或者发现相邻格子和初始格子的颜色不一致时,则可判定当前所遍历到的格子是边界格子。再将边界的格子着上指定的颜色即可。
class Solution
public:
vector<vector<int>> colorBorder(vector<vector<int>>& grid, int row, int col, int color)
if(row < 0 || row >= grid.size() || col < 0 || col >= grid[0].size()) return grid;
visited = vector<vector<int>>(grid.size(), vector<int>(grid[0].size(), 0)); //初始化访问记录
dfs(grid, visited, row, col, color); //进行dfs
for(int i = 0; i < grid.size(); ++i) //进行边界着色
for(int j = 0; j < grid[0].size(); ++j)
if(visited[i][j] == 2) grid[i][j] = color;
return grid;
private:
vector<int> direction = -1, 0, 1, 0, -1; //方向向量
vector<vector<int>> visited; //记录是否访问过,进行dfs剪枝,同时能记录边界
void dfs(vector<vector<int>>& grid, vector<vector<int>>& visited, int row, int col, int color)
if(row < 0 || row >= grid.size() ||
col < 0 || col >= grid[0].size() || visited[row][col]) return; //如果坐标不合法返回
visited[row][col] = 1; //标记已经遍历过该坐标
for(int i = 0; i < 4; i++) //遍历当前坐标上下左右的四个坐标
int row_new = row + direction[i], col_new = col + direction[i+1];
if(row_new >= 0 && row_new < grid.size() &&
col_new >= 0 && col_new < grid[0].size() &&
grid[row][col] == grid[row_new][col_new]) //如果符合,则说明没有到达连通集边界
dfs(grid, visited, row_new, col_new, color);
else visited[row][col] = 2; //如果不符合,则说明到达连通集边界,将当前坐标标记为2
;
以上是关于LeetCode_Dec_1st_Week的主要内容,如果未能解决你的问题,请参考以下文章