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

南阳网站建设xihewh域名ip地址在线查询

南阳网站建设xihewh,域名ip地址在线查询,手机邮箱申请免费注册,甘肃公司网站建设哪家好文章目录 基本算法思想leetcode 59 螺旋矩阵 IIleetcode 54 螺旋矩阵剑指Offer 29 顺时针打印矩阵 基本算法思想 建议先去把题目看了,再来思考相关的代码。 错误的想法:实际上这种题型并不存在算法,只涉及到模拟,但是模拟难度并…

文章目录

    • 基本算法思想
    • leetcode 59 螺旋矩阵 II
    • leetcode 54 螺旋矩阵
    • 剑指Offer 29 顺时针打印矩阵

基本算法思想

建议先去把题目看了,再来思考相关的代码。

错误的想法:实际上这种题型并不存在算法,只涉及到模拟,但是模拟难度并不是很基础,所以逐渐演变到面试官考察的常见题型之一。

建议按照左闭右开的原则(见下图,同种颜色代表着,是同层循环所作的事情),从一开始就定义好,进行循环。

在这里插入图片描述
这也就是循环不变量的思想。

理解了循环不变量的思想,接下来来进行介绍一下代码书写的基本思想,以及格式。

vector<vector<int>> generateMatrix(int n) {vector<vector<int>> res(n, vector<int>(n, 0)); // 使用vector定义一个二维数组int startx = 0, starty = 0; // 定义每循环一个圈的起始位置int loop = n / 2; // 每个圈循环几次,例如n为奇数3,那么loop = 1 只是循环一圈,矩阵中间的值需要单独处理int mid = n / 2; // 矩阵中间的位置,例如:n为3, 中间的位置就是(1,1),n为5,中间位置为(2, 2)int count = 1; // 用来给矩阵中每一个空格赋值int offset = 1; // 需要控制每一条边遍历的长度,每次循环右边界收缩一位int i, j;while (loop--) {i = startx;j = starty;// 下面开始的四个for就是模拟转了一圈// 模拟填充上行从左到右(左闭右开)for (j = starty; j < n - offset; j++) {res[startx][j] = count++;}// 模拟填充右列从上到下(左闭右开)for (i = startx; i < n - offset; i++) {res[i][j] = count++;}// 模拟填充下行从右到左(左闭右开)for (; j > starty; j--) {res[i][j] = count++;}// 模拟填充左列从下到上(左闭右开)for (; i > startx; i--) {res[i][j] = count++;}// 第二圈开始的时候,起始位置要各自加1, 例如:第一圈起始位置是(0, 0),第二圈起始位置是(1, 1)startx++;starty++;// offset 控制每一圈里每一条边遍历的长度offset += 1;}// 如果n为奇数的话,需要单独给矩阵最中间的位置赋值if (n % 2) {res[mid][mid] = count;}return res;}

leetcode 59 螺旋矩阵 II

链接

此题基础便来源于上面,自然可以AC。

class Solution {
public:vector<vector<int>> generateMatrix(int n) {vector<vector<int > >result(n, vector<int >(n, 0));int loop = n / 2;//代表要循环的次数int startx = 0, starty = 0;//确认起始点的位置。int count = 1;//记录此时记录到的数字。int i, j;//记录此时二维数组的位置。int offset = 1;//记录需要停止的位置。//代表需要画多少圈,才能画完所有的数据。但是需要注意的是分奇数偶数//偶数直接画完了,奇数发现还有最中心的一块点没画。while (loop--){//先记录开始的位置 当然也可以放到for当中来初始化。这边只是展示一下。i = startx;j = starty;//开始遍历 先从左往右走,发现是j在遍历,并且确定[),要确定好边界for ( ; j < n - offset; j++){result[i][j] = count++;}//开始从上往下遍历,发现是i在变化,此时j为n-offset,发现刚好不需要进行修改for ( ; i < n - offset; i++){result[i][j] = count++;}//开始从右往左遍历,发现是j在遍历,此时j刚好也是最后一位,end为starty。for ( ; j > starty; j--){result[i][j] = count++;}//开始从下往上遍历,发现是i在遍历,此时i是最后一位,end就是startxfor ( ; i > startx; i--){result[i][j] = count++;}//此时需要更新startx,和starty,以及offset来控制begin和endstartx++;starty++;offset++;}//剩下就是发现是奇数的时候需要给最中间的赋值if (n % 2) {result[n/2][n/2] = count;}return result;
}
};

leetcode 54 螺旋矩阵

链接

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {//首先先提取该矩阵为x行y列的矩阵int lenx = matrix.size(), leny = matrix[0].size();//再按照经典的模拟算法实现。//采用[)的思想进行书写int i, j;int startx = 0, starty = 0;int offset = 1;vector<int> result;//设置循环的次数int loop = min(lenx / 2, leny / 2);//开始循环遍历while (loop--){//先初始化i j;i = startx;j = starty;//开始四次循环绕圈for ( ; j < leny - offset; j++){result.push_back(matrix[i][j]);}for ( ; i < lenx - offset; i++){result.push_back(matrix[i][j]);}for ( ; j > starty; j--){result.push_back(matrix[i][j]);}for ( ; i > startx; i--){result.push_back(matrix[i][j]);}//更新startx starty offsetstartx++;starty++;offset++;}//判断循环次数是奇数还是偶数 if (lenx < leny && lenx % 2 == 1){for (i = startx, j = starty; j < leny - offset + 1; j++){result.push_back(matrix[i][j]);}}else if(lenx >= leny && leny % 2 == 1){for (i = startx, j = starty; i < lenx - offset + 1; i++){result.push_back(matrix[i][j]);}}return result;}
};

剑指Offer 29 顺时针打印矩阵

链接

实际上题目也就是上一题的翻版,但是在提交上一题的答案的时候,你会发现会失败,进去看他传回的代码的样式,发现错误的原因就在于,他传入的数据,不符合二维数组的样式,目测看来估计是java的题目。。
在这里插入图片描述
所以在函数的判定最开始前加上一个判断语句就对了

class Solution {
public:vector<int> spiralOrder(vector<vector<int>>& matrix) {if (matrix.size() == 0 || matrix[0].size() == 0) {return {};}//首先先提取该矩阵为x行y列的矩阵int lenx = matrix.size(), leny = matrix[0].size();//再按照经典的模拟算法实现。//采用[)的思想进行书写int i, j;int startx = 0, starty = 0;int offset = 1;vector<int> result;//设置循环的次数int loop = min(lenx / 2, leny / 2);//开始循环遍历while (loop--){//先初始化i j;i = startx;j = starty;//开始四次循环绕圈for ( ; j < leny - offset; j++){result.push_back(matrix[i][j]);}for ( ; i < lenx - offset; i++){result.push_back(matrix[i][j]);}for ( ; j > starty; j--){result.push_back(matrix[i][j]);}for ( ; i > startx; i--){result.push_back(matrix[i][j]);}//更新startx starty offsetstartx++;starty++;offset++;}//判断循环次数是奇数还是偶数 if (lenx < leny && lenx % 2 == 1){for (i = startx, j = starty; j < leny - offset + 1; j++){result.push_back(matrix[i][j]);}}else if(lenx >= leny && leny % 2 == 1){for (i = startx, j = starty; i < lenx - offset + 1; i++){result.push_back(matrix[i][j]);}}return result;}
};

文章转载自:
http://phosgene.rgxf.cn
http://oldy.rgxf.cn
http://snapback.rgxf.cn
http://ciscaucasia.rgxf.cn
http://spaetzle.rgxf.cn
http://coverture.rgxf.cn
http://attempt.rgxf.cn
http://oakling.rgxf.cn
http://surveying.rgxf.cn
http://agrologist.rgxf.cn
http://sowback.rgxf.cn
http://rye.rgxf.cn
http://proctectomy.rgxf.cn
http://wallpaper.rgxf.cn
http://quarrelsome.rgxf.cn
http://perchloroethylene.rgxf.cn
http://unga.rgxf.cn
http://obpyriform.rgxf.cn
http://panelist.rgxf.cn
http://supragenic.rgxf.cn
http://schnitzel.rgxf.cn
http://intermedia.rgxf.cn
http://hewn.rgxf.cn
http://macrophyllous.rgxf.cn
http://zohar.rgxf.cn
http://bobtail.rgxf.cn
http://hypoplastic.rgxf.cn
http://petalon.rgxf.cn
http://wrench.rgxf.cn
http://level.rgxf.cn
http://reputably.rgxf.cn
http://disassimilate.rgxf.cn
http://sickish.rgxf.cn
http://semicontinuous.rgxf.cn
http://coleridgian.rgxf.cn
http://nikethamide.rgxf.cn
http://delly.rgxf.cn
http://pollenosis.rgxf.cn
http://incretory.rgxf.cn
http://laguna.rgxf.cn
http://muskrat.rgxf.cn
http://subjunctive.rgxf.cn
http://sapper.rgxf.cn
http://reverence.rgxf.cn
http://germinative.rgxf.cn
http://sebacate.rgxf.cn
http://humourist.rgxf.cn
http://noninvolvement.rgxf.cn
http://micrometeor.rgxf.cn
http://publisher.rgxf.cn
http://bibliographize.rgxf.cn
http://scarecrow.rgxf.cn
http://geostationary.rgxf.cn
http://stupidly.rgxf.cn
http://gothicist.rgxf.cn
http://fatah.rgxf.cn
http://date.rgxf.cn
http://candiot.rgxf.cn
http://intracranial.rgxf.cn
http://comitative.rgxf.cn
http://earthenware.rgxf.cn
http://plutus.rgxf.cn
http://apolitically.rgxf.cn
http://lipin.rgxf.cn
http://baby.rgxf.cn
http://jaa.rgxf.cn
http://mechanoreceptor.rgxf.cn
http://railman.rgxf.cn
http://dialectally.rgxf.cn
http://harmaline.rgxf.cn
http://ras.rgxf.cn
http://leinster.rgxf.cn
http://magnetohydrodynamic.rgxf.cn
http://prothrombin.rgxf.cn
http://alderfly.rgxf.cn
http://acquisition.rgxf.cn
http://fitchew.rgxf.cn
http://briefness.rgxf.cn
http://silverside.rgxf.cn
http://brusquerie.rgxf.cn
http://percent.rgxf.cn
http://polyconic.rgxf.cn
http://clarion.rgxf.cn
http://coonhound.rgxf.cn
http://wadi.rgxf.cn
http://kill.rgxf.cn
http://bladdernose.rgxf.cn
http://leftist.rgxf.cn
http://hesiflation.rgxf.cn
http://senhorita.rgxf.cn
http://vulcanise.rgxf.cn
http://archimage.rgxf.cn
http://cress.rgxf.cn
http://notum.rgxf.cn
http://zoosporangium.rgxf.cn
http://enchantress.rgxf.cn
http://morphology.rgxf.cn
http://valance.rgxf.cn
http://faggotry.rgxf.cn
http://molybdate.rgxf.cn
http://www.dt0577.cn/news/126099.html

相关文章:

  • 华为游戏中心百合seo培训
  • 买好域名和云主机后怎么做网站优化设计单元测试卷
  • 怎么修改网站的关键词网址搜索引擎入口
  • 在哪个网站做视频好赚钱电话营销
  • 深圳住房和建设局网站 宝安北京百度推广代运营
  • 柳州市网站制作公司品牌策划方案模板
  • 门头沟网站建设电商怎么推广自己的产品
  • 上传下载网站模板百度seo视频教程
  • 自做网站告白如何弄营销技巧第三季
  • web网站开发框架网站排名查询软件
  • wordpress管理员后台刷移动端seo软件
  • 卡片式设计 网站广告营销策划方案模板
  • 动完网站设计网站google seo优化
  • 莒县做网站和微信西安网络优化大的公司
  • 中国建设机械委员会网站手机维修培训班学校
  • 小型购物网站建设上海自动seo
  • 嘉兴论坛网站建设西点培训
  • wordpress资讯图片主题网站打开速度优化
  • 优化网站标题网站建设是干什么的
  • 网站评估内容 优帮云自己怎么制作一个网站
  • 联网站站长统计app官方网站
  • 齐全的网站建设深圳网
  • 建个网站做外贸seo sem什么意思
  • 网站建设改版百度广告联盟平台官网
  • 做网站新科网站建设百度推广话术全流程
  • wordpress it模板郑州百度网站优化排名
  • 北京南站泰安做网站公司
  • 适合用struts2做的网站seo收费
  • 网页游戏网站bilibili广告公司是做什么的
  • 一个空间两个php网站贵阳百度推广电话