最新公告
  • 欢迎您光临波比源码,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 顺时针打印矩阵


    顺时针打印矩阵

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

    For example,
    Given the following matrix:

    [
    [ 1, 2, 3 ],
    [ 4, 5, 6 ],
    [ 7, 8, 9 ]
    ]
    You should return [1,2,3,6,9,8,7,4,5].

    题目意思是要将矩阵顺时针打印出来

    • 在剑指offer中也有类似试题

    解题思路以下:

    视察矩形 以下 看成1个圈 上行 右列 下行 左列

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

    矩形rows 行数为3 cols列数为3 行跟列都有1个范围 行数的范围为0到2 列数的范围为 0到2

    设 rowstart=0 rowend=2 colstart=0 colend=2 分别辨识行的起始、结束 和列的起始和结束

    打印先从第1行开始 也就是 1 2 3 开始 此时

    行不变 行动rowstart 列的变化为 colstart 到 colend 也就是 0到2 number[rowstart][i] i表示列 打印完以后 rowstart ++ 表示行数往下扩大

    接着打印当前 最右侧列 6 9

    此时列不变成 colend 行变化 为 rowstart 到 rowend 打印完后 colend– 表示列变小

    接着打印当前最下边行 8 7

    同上,此时 行不变 列出 colend 变到colstart 打印完后 rowend 减小 往上走

    接着打印 4

    4为第1圈的最后1个边界 此时列不变 行从rowend到 rowstart 打印完后 colstart++ 列变大 往右走

    上面为1个圈,接着循环就是,直到 rowstart > rowend 或 colstart > colend

    代码以下:

    class Solution {
    public:
    vector<int> spiralOrder(vector<vector<int> > &matrix) {

    vector<int> result;
    if(matrix.size()==0)
    return result;
    int m=matrix.size()⑴;
    int n=matrix[0].size()⑴;

    int sn=0;
    int sm=0;
    int i;
    while(true)
    {
    for(i=sn;i<=n;i++)
    result.push_back(matrix[sm][i]);
    if(++sm>m)
    break;

    for(i=sm;i<=m;i++)
    result.push_back(matrix[i][n]);

    if(--n<sn)
    break;

    for(i=n;i>=sn;i--)
    result.push_back(matrix[m][i]);
    if(--m<sm)
    break;

    for(i=m;i>=sm;i--)
    result.push_back(matrix[i][sn]);
    if(++sn>n)
    break;

    }
    return result;
    }
    };

    带测试的代码

    #include<iostream>
    using namespace std;

    void printMatrix(int number[3][4],int rows,int cols)
    {
    int rowstart=0;
    int rowend=rows-1;
    int colstart=0;
    int colend=cols-1;

    while(rowstart<=rowend&&colstart<=colend)
    {
    int i;
    for( i=colstart;i<=colend;i++)
    {
    cout<<number[rowstart][i]<<" ";
    }
    ++rowstart;
    if(rowstart>rowend)
    break;
    for( i=rowstart;i<=rowend;i++)
    {
    cout<<number[i][colend]<<" ";
    }
    --colend;
    if(colend<colstart)
    break;
    for( i=colend;i>=colstart;i--)
    {
    cout<<number[rowend][i]<<" ";

    }
    --rowend;
    if(rowend<rowstart)
    break;
    for( i=rowend;i>=rowstart;i--)
    {
    cout<<number[i][colstart]<<" ";
    }
    ++colstart;
    if(colstart>colend)
    break;
    }

    }

    int main()
    {
    int number[3][4]={1,2,3,4,10,11,12,5,9,8,7,6};
    printMatrix(number,3,4);
    }



    波比源码 – 精品源码模版分享 | www.bobi11.com
    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
    3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!

    波比源码 » 顺时针打印矩阵

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    波比源码
    一个高级程序员模板开发平台
    升级波友尊享更多特权立即升级