• 面试随缘做题---day1


    leetcode no.54 螺旋矩阵(数组)

    顺时针访问数组,到边界(超出矩阵大小或遇到已访问折回去),转方向需要注意操作。

    • 转方向条件:横竖越界或者碰到vis=1 退出条件:访问完m*n个元素
    • 每次刚进来让temp=start,里层循环一条线一个方向,每次试探之前让start=temp(即上一轮移动结果),当前start点设置为已访问,然后产生新的temp,最后temp违规,更新方向,之后修改start(此处如果不修改,哪那么下一次进来还是vis=1的start)。进入下一轮大循环。
    • 有大于0的判断,且必须在判断vis数组为0之前,不然访问负下标直接报错
    • 记得更新color的值

    注意为空的时候没有横向长度,metric[0].size是不合法的。

    class Solution {
    public:
        vector<int> spiralOrder(vector<vector<int>>& matrix) {
            vector<int>ans;
            int len1=matrix.size();
            if(len1==0) return ans;
            int len2=matrix[0].size();
            int x[4]={0,1,0,-1};
            int y[4]={1,0,-1,0};
            int startx=0;
            int starty=0;
            int tempx=startx;
            int tempy=starty;
            int color=0;
            int vis[100][100]={0};
            int i=0;
            while(color<len1*len2)
            {
                tempx=startx;
                tempy=starty;
                //printf("(%d,%d)",startx,starty);
                while(tempx<len1 && tempy<len2 && tempx>=0 && tempy>=0 && vis[tempx][tempy]==0 )
                {
                    startx=tempx;
                    starty=tempy;
                    vis[tempx][tempy]=1;
                    //printf("%d",matrix[startx][starty]);
                    color++;
                    ans.push_back(matrix[startx][starty]);
                    tempx+=x[i];
                    tempy+=y[i];
                }
                i++;
                i=i%4;
                startx+=x[i];
                starty+=y[i];
            }
            return ans;
        }
    };
    View Code
    时间才能证明一切,选好了就尽力去做吧!
  • 相关阅读:
    后缀数组
    网络流 HOJ1087
    备用
    css-具有缩略图的材料列表
    正则匹配log行
    vue-cli的webpack打包,icon无法正确加载
    导出CSV,导出excel数字过长显示科学计数法解决方案
    js导出CSV
    git常见操作指令
    javascript原型的意义
  • 原文地址:https://www.cnblogs.com/tingxilin/p/13342111.html
Copyright © 2020-2023  润新知