小赫のLeetCode简易题解
前言
笔者目前还在小白阶段,为了练习一下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;
}
};