滴滴 算法 821笔试

第一题 蛇形输出斐波那契数列 100%
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>

using namespace std;
bool inarea(int i , int j , vector<vector<long>>&res)
{
    return i >= 0 && i < res.size() && j >= 0 && j < res[0].size();
}


int main()
{
    int n; cin >> n;
    if(n == 1)
        {
            cout << 1 << endl;
            return 0;
        }
    vector<vector<long>>res(n,vector<long>(n,0));
    vector<long>dp(n * n,0);
    dp[0] = 1; dp[1] = 1;
    for(int i = 2; i < n * n; i++)
        {
            dp[i] = dp[i-1] + dp[i-2];
        }
    int count = n * n - 1;
    int i = 0, j = -1;
    vector<pair<int,int>>dir;
    dir.push_back({0,1});dir.push_back({1,0});dir.push_back({0,-1});dir.push_back({-1,0});
    int cur = 0;
    while(count >= 0)
        {
            while(1)
                {
                    if(inarea(i+dir[cur].first,j+dir[cur].second,res) && res[i+dir[cur].first][j+dir[cur].second] == 0)
                        {
                            
                            i += dir[cur].first;
                            j += dir[cur].second;
                            res[i][j] = dp[count];
                            break;
                        }
                    else
                        {
                            cur++;
                            cur = cur % 4;
                        }
                    
                }
            count --;
        }
    for(auto i : res)
        {
            for(auto j : i)
                {
                    cout << j << " ";
                }
            cout << endl;
        }
    return 0;
}
第二题 找CHINA个数 91%  最后突然意识到问题出在visit数组上,比如A在前一次遍历之后,下一个路径结束位点A可能和上一个相同,visit标记过的化会导致少计数一次
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>

using namespace std;

int res = 0;
string target = "CHINA";

bool inarea(vector<vector<char>>&num,int i, int j)
{
    return i >= 0 && i < num.size() && j >= 0 && j < num[0].size();
}

void dfs(vector<vector<char>>&num, int i, int j,vector<vector<char>>&visit,int index)
{
    if(!inarea(num,i,j)) return ;
    if(index == 4 && num[i][j] == target[index])
        {
            res++;
            return;
        }
    if(visit[i][j] == true) return;
    visit[i][j] = true;
    if(num[i][j] == target[index])
        {
            dfs(num,i,j+1,visit,index+1);
            dfs(num,i+1,j,visit,index+1);
            dfs(num,i,j-1,visit,index+1);
            dfs(num,i-1,j,visit,index+1);
        }
}
int main()
{
    int n;
    cin >> n;
    vector<vector<char>>num(n,vector<char>(n,'-1'));
    for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < n; j++)
                {
                    cin >> num[i][j];
                }
        }
    for(int i = 0; i < n;i++)
        {
            for(int j = 0; j < n; j++)
                {

                    vector<vector<char>>visit(n,vector<char>(n,false));
                    dfs(num,i,j,visit,0);

                }
        }
    cout << res;

}



#笔试题目##滴滴#
全部评论
题目不一样... 我一个是斐波那契🐍一个是输出abc+acc
1 回复 分享
发布于 2020-08-21 20:57

相关推荐

10-17 16:07
门头沟学院 Java
牛牛大你18号:在汇报,突然弹出来,,领导以为我在准备跳槽,刚从领导办公室谈心出来
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务