LeetCode刷题笔记-数据结构-day8
Posted LL.LEBRON
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题笔记-数据结构-day8相关的知识,希望对你有一定的参考价值。
文章目录
LeetCode刷题笔记-数据结构-day8
49.字母异位词分组
1.题目描述
原题链接:49. 字母异位词分组
2.解题思路
算法:哈希表
- 我们把一个字符串排序后的字符串为
key
,所有的字母异位词为value
- 遍历所有的字符串
x
,把它们排序后的字符串t
作为key
,自己本身作为value
的一部分存入map
- 最后遍历
map
,将所有的value
存入答案就行
3.代码
class Solution
public:
vector<vector<string>> groupAnagrams(vector<string>& strs)
vector<vector<string>> res;
map<string,vector<string>> hash;
for(auto x:strs)
string t=x;
sort(t.begin(),t.end());
hash[t].push_back(x);
for(auto [a,b]:hash)
res.push_back(b);
return res;
;
43.字符串相乘
1.题目描述
原题链接:43. 字符串相乘
2.解题思路
- 长度为
n
和长度为m
的数字相乘,最多只会有n+m
位,我们这里将两个数分别存入两个vector
数组中,方便计算,最终的答案存入C
- 两个数相乘,
num1[i]*num2[j]
的结果累加到C[i+j]
- 计算完后,在对
C
数组遍历,将大于等于10的位进位 - 最后需要判断不能有前导零,然后累加答案
3.代码
class Solution
public:
string multiply(string num1, string num2)
int n=num1.size(),m=num2.size();
vector<int> C(n+m);
vector<int> A,B;
for(int i=n-1;i>=0;i--) A.push_back(num1[i]-'0');
for(int i=m-1;i>=0;i--) B.push_back(num2[i]-'0');
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
C[i+j]+=A[i]*B[j];
for(int i=0,t=0;i<C.size();i++)
t+=C[i];
C[i]=t%10;
t/=10;
string res;
int k=C.size()-1;
while(k>0&&!C[k]) k--;
while(k>=0) res+=C[k--]+'0';
return res;
;
以上是关于LeetCode刷题笔记-数据结构-day8的主要内容,如果未能解决你的问题,请参考以下文章