力扣 第 300 场周赛

115 篇文章 3 订阅
35 篇文章 3 订阅

6108. 解密消息

class Solution {
public:
    map<char,int>mp;
    string decodeMessage(string key, string message) {
        int cnt=0;
        string s;
        for(auto x:key)
            if(!mp.count(x)&&x!=' ')mp[x]=cnt++;
        for(auto x:message)
            if(x==' ')s+=x;
            else s+=mp[x]+'a';
        return s;
    }
};

6111. 螺旋矩阵 IV

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    vector<vector<int>> spiralMatrix(int m, int n, ListNode* head) {
        vector<vector<int>>v(m,vector<int>(n));
        int row=0,col=0;
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)v[i][j]=-1;
        int l=0,r=n-1;
        int t=0,b=m-1;
        while(l<=r||t<=b)
        {
            for(int i=l;i<=r&&t<=b&&head;i++)v[t][i]=head->val,head=head->next;
            t++;
            for(int i=t;i<=b&&l<=r&&head;i++)v[i][r]=head->val,head=head->next;
            r--;
            for(int i=r;i>=l&&t<=b&&head;i--)v[b][i]=head->val,head=head->next;
            b--;
            for(int i=b;i>=t&&l<=r&&head;i--)v[i][l]=head->val,head=head->next;
            l++;
        }
        return v;
    }
};

6109. 知道秘密的人数

class Solution {
    public:
        int peopleAwareOfSecret(int n, int delay, int forget) {
            const int mod=1e9+7;
            vector<vector<int>>f(n+1,vector<int>(n+1));
            for(int i=1;i<=forget;i++)f[1][i]=1;
            for(int i=2;i<=n;i++)
            {
                for(int j=1;j<=forget;j++)
                {
                    if(j==1)f[i][j]=(f[i-1][forget-1]-f[i-1][delay-1])%mod;
                    else f[i][j]=(f[i-1][j-1]-f[i-1][j-2])%mod;
                    f[i][j]=(f[i][j]+f[i][j-1])%mod;
                }
            }
            return (f[n][forget]+mod)%mod;
        }
    };

6110. 网格图中递增路径的数目

class Solution {
public:
    int n,m;
    const int N=1010,mod=1e9+7;
    int f[1010][1010];
    vector<vector<int>>g;
    int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
    int dp(int x,int y)
    {
        int &v=f[x][y];
        if(~v)return v;
        v=1;
        for(int i=0;i<4;i++)
        {
            int a=x+dx[i],b=y+dy[i];
            if(a>=0&&a<n&&b>=0&&b<m&&g[a][b]>g[x][y])
                v=(v+dp(a,b))%mod;
        }
        return v;
    }
    int countPaths(vector<vector<int>>& grid) {
        n=grid.size(),m=grid[0].size();
        g=grid;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                f[i][j]=-1;
        int res=0;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                res=(res+dp(i,j))%mod;
        return res;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leimingzeOuO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值