欢迎光临散文网 会员登陆 & 注册

小赫のLeetCode简易题解

2023-04-05 00:10 作者:Ego-poulsen  | 我要投稿

前言

笔者目前还在小白阶段,为了练习一下c++的语法以及熟悉一些简单的算法,随便刷些LeetCode上能做的题,其中包含个人思考的一些题解以及代码将简写在这个专栏中,由于笔者对STL等还不熟悉(c++11及后面的一些语法还不了解),欢迎大佬们提出代码优化的建议

为了简便就不写更新日志了,以后有新的题解应该就会更新,后期更新的题目多了再考虑分个类啥的,目前就是随便写写

题解给出思路和代码块,目前代码块只写了c++的,用其它语言的伙伴可以参照思路用自己的语言实现

注:除题目本身为官网复制以外,其它内容均为笔者原创



59,螺旋矩阵

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

示例 1:

输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1输出:[[1]]

提示:1 <= n <= 20


思路:模拟过程,以圈数为单位,模拟顺时针画每一圈的过程,注意画圈时是左闭右开的

代码块:

class Solution {

public:

    vector<vector<int>> generateMatrix(int n)

    {

        vector<vector<int>> result(n,vector<int>(n,0));

        int k=1,x=0,y=0;

        for(int i=0;i<n/2;++i)//循环画每一圈,注意下标

        {

            x=y=i;

            for(int j=0;j<(n-2*i-1);++j)    result[x][y++]=k++;//向右

            for(int j=0;j<(n-2*i-1);++j)    result[x++][y]=k++;//向下

            for(int j=0;j<(n-2*i-1);++j)    result[x][y--]=k++;//向左

            for(int j=0;j<(n-2*i-1);++j)    result[x--][y]=k++;//向上

        }

        if(n%2!=0)  result[n/2][n/2]=n*n;

        return result;

    }

};



49,字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]输出: [[""]]

示例 3:

输入: strs = ["a"]输出: [["a"]]

提示:

1 <= strs.length <= 104

0 <= strs[i].length <= 100

strs[i] 仅包含小写字母


思路:将strs中每个字符串排序,排序后相同的字符串即是排序前的字母异位词,然后用map统计结果,并将结果保存

代码块:

class Solution {

public:

    vector<vector<string>> groupAnagrams(vector<string>& strs)

    {

        vector<string> tmp;

        tmp=strs;

        for(int i=0;i<tmp.size();++i)   sort(tmp[i].begin(),tmp[i].end());

        vector<vector<string>> result;

        unordered_map<string,int> m;//键值为不同的字母异位词,实值为其出现次数

        int k=0;

        for(int i=0;i<tmp.size();++i)//遍历strs的每个字符串

        {

            if(m.find(tmp[i])==m.end())//如果map中没有相应的字母异位词就插入

            {

                vector<string> x;

                m.insert(make_pair(tmp[i],k));

                result.push_back(x);

                result[k].push_back(strs[i]);

                ++k;

                continue;

            }

            result[m[tmp[i]]].push_back(strs[i]);//利用map的特性统计结果

        }

        return result;

    }

};









小赫のLeetCode简易题解的评论 (共 条)

分享到微博请遵守国家法律