leetcode——刷题

167 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情


541.反转字符串II

思路

题目讲的主要是把字符串以2*k个字符分组,==然后把每一组的前k个字符反转==,当其中有一组字符不足k个的时候,就反转该组全部的字符。 我们用i从0开始,每次跳跃2*k个字符,此时的i就是每一组的起始位置,然后就进行反转就可以,==但是要注意不足k个字符的时候要全部反转。==

代码

class Solution {
public:
    void swap(int l,int r,string& s)
    {
        while(l<r)
        {
            ::swap(s[l],s[r]);
            ++l;
            --r;
        }
    }
    string reverseStr(string s, int k) {
        int left;
        int len=s.size();
        int i;
        for(i=0;i<len;i+=2*k)
        {
            left=i;
            if(left+k-1>=len)
                swap(left,len-1,s);
            else
            swap(left,left+k-1,s);            
        }
        return s;
    }
};

557.反转字符串中的单词III

思路

从头开始遍历字符串中的空格,同时记录首个不是空格的位置,然后进行反转字符就可以。

代码

class Solution {
public:
    string reverseWords(string s) {
        auto stare=s.begin();
        for(auto it=s.begin();it<s.end();++it)
        {
            if(*it==' ')
            {
                reverse(stare,it);
                stare=it+1;
            }
        }
        reverse(stare,s.end());
        return s;
    }
};

43.字符串相乘

思路

思路就是模拟乘法的过程,乘数的每一位(从后往前)分别与被乘数的每一位(从后往前)相乘,相乘的结果放入提前开好的空间里面。该空间的大小为两个字符串的长度。 细节 当其中一个字符串为0的时候,直接返回0 乘的结果是从开辟空间的最后一个开始的。对于乘好的数,要进行判断是否要进位。进位:大于10,进/10,原数变成%10。 最后把乘好的结果添加到字符串中,要从第一个非0数开始插入。最后要释放开辟的空间。

代码

class Solution {
public:
	string multiply(string num1, string num2) {
        if(num1[0]=='0'||num2[0]=='0')
        return "0";
		int len1 = num1.size(), len2 = num2.size();
		int* arr = new int[len1 + len2]{ 0 };
		for (int i = len1-1; i >=0; --i)
		{
			for (int j =len2-1; j >=0; --j)
			{
				arr[i + j+1] += (num1[i] - '0') * (num2[j] - '0');
				if (arr[i + j+1] > 9)
				{
					arr[i + j ] += arr[i + j+1] / 10;
					arr[i + j+1] = arr[i + j+1] % 10;
				}
			}
		}
		string ret;
		int len = 0;
		for (int i = 0; i < len1+len2;++i)
		{
			if (arr[i] != 0)
			{
				len = i;
				break;
			}
		}
		for (int i = len; i<len1+len2; ++i)
		{
			ret += arr[i] + '0';
		}
		delete[] arr;
		return ret;
	}
};