蛇形填数 c++ 面试题目

刷题,面试都遇到了好多关于蛇形填数的题,以前也做过,觉得没什么难度,只要自己仔细写的话都是没什么问题的,不过正经自己来写的话发现问题一大堆,于是今天进去写了一下。

主体思路就是,定义一个dir方向数组依次为右下左上,以及top,down,right,left这四个边界,当到达边界时dir++,具体看代码吧!

#include
#define ll long long
#define qq printf("QAQ");
using namespace std;
const int maxn=1e5+5;
const int mod=1e9+7;
const int inf=0x3f3f3f3f;
vector fun(vector >m)
{
    vectorans;
    int t=0,d=m.size()-1,r=0,l=m[0].size()-1;
    int dir[4][2]= {0,1,1,0,0,-1,-1,0},nowdir=0,x=0,y=0;
    while(t<=d&&r<=l)
    {
        ans.push_back(m[x][y]);
        //if(x+dir[nowdir][0]>d||x+dir[nowdir][0]l||y+dir[nowdir][1]d)//超出下边界,右边界限减少,因为只有四种情况分别考虑就好
                l--,nowdir=(nowdir+1)%4;
            else if(x+dir[nowdir][0]l)
                t++,nowdir=(nowdir+1)%4;
            else if(y+dir[nowdir][1] >v;
    v.resize(5);
    v[0].push_back(1);
    v[0].push_back(2);
    v[0].push_back(3);
    v[1].push_back(4);
    v[1].push_back(5);
    v[1].push_back(6);
    v[2].push_back(7);
    v[2].push_back(8);
    v[2].push_back(9);
    v[3].push_back(10);
    v[3].push_back(11);
    v[3].push_back(12);
    v[4].push_back(13);
    v[4].push_back(14);
    v[4].push_back(15);
    vectorans;
    ans=fun(v);
    for(int i=0; i

结果:

1 2 3 6 9 12 15 14 13 10 7 4 5 8 11

你可能感兴趣的:(春招刷题)