LeetCode刷题笔记-数据结构-day8

Posted LL.LEBRON

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题笔记-数据结构-day8相关的知识,希望对你有一定的参考价值。

文章目录

LeetCode刷题笔记-数据结构-day8

49.字母异位词分组

1.题目描述

原题链接:49. 字母异位词分组

2.解题思路

算法:哈希表

  1. 我们把一个字符串排序后的字符串为key,所有的字母异位词value
  2. 遍历所有的字符串x,把它们排序后的字符串t作为key,自己本身作为value的一部分存入map
  3. 最后遍历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.解题思路

  1. 长度为n和长度为m的数字相乘,最多只会有n+m位,我们这里将两个数分别存入两个vector数组中,方便计算,最终的答案存入C
  2. 两个数相乘,num1[i]*num2[j]的结果累加到C[i+j]
  3. 计算完后,在对C数组遍历,将大于等于10的位进位
  4. 最后需要判断不能有前导零,然后累加答案

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的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题笔记-数据结构-day6

LeetCode刷题笔记-数据结构-day6

LeetCode刷题笔记-数据结构-day9

LeetCode刷题笔记-数据结构-day7

LeetCode刷题笔记-数据结构-day7

LeetCode刷题笔记-数据结构-day21