腾讯精选50题—Day6题目43,46,53

腾讯精选50题—Day6题目43,46,53

  今天是刷题的第六天…周天阳光明媚,刷题快乐~~

1. 题目43 字符串相乘

(1) 题目描述

在这里插入图片描述

(2) 思路

  这个进位用p1表示(因为是倒着的,p1和p2让我想了很久…),还需要再理解…

(3) 题解

class Solution {
    
    
public:
	string multiply(string num1, string num2) {
    
    
	
		int m = num1.size();
		int n = num2.size();
		string result = "";

		if (num1 == "0" || num2 == "0")
			return "0";
		vector<int> res(m + n, 0);

		for (int i = m - 1; i >= 0; i--)
		{
    
    
			for (int j = n - 1; j >= 0; j--)
			{
    
    
				int temp = (num1[i] - '0') * (num2[j] - '0');
				int p1 = i + j;
				int p2 = i + j + 1;

				int sum = res[p2] + temp;
				res[p2] = sum % 10;
				res[p1] += sum / 10;
			}
		}
		for (int i = 0; i < res.size(); i++)
		{
    
    
			if (i == 0 && res[i] == 0)
				continue;
			result += res[i] + '0';
		}
		return result;
	}
};

结果:
在这里插入图片描述
时间复杂度: O ( m n ) O(mn) O(mn)
空间复杂度: O ( m + n ) O(m+n) O(m+n)

2. 题目46 全排列

(1) 题目描述

在这里插入图片描述

(2) 思路

  递归生成排序树。

(3) 题解

class Solution {
    
    
public:
    vector<vector<int>> permute(vector<int>& nums) {
    
    
        
        vector<vector<int>> result;
        int len = nums.size();

        if (len < 0) return result;

        travel(nums, 0, result);
        return result;

    }
    void travel(vector<int>& nums, int depth, vector<vector<int>>& result)
    {
    
    
        if (depth >= nums.size() - 1)
        {
    
    
            result.push_back(nums);
            return;
        }

        for (int i = depth; i < nums.size(); ++i)
        {
    
    
            swap(nums[depth], nums[i]);
            travel(nums, depth + 1, result);
            swap(nums[depth], nums[i]);
        }
    }
};

结果:
在这里插入图片描述

时间复杂度: O ( n ∗ n ! ) O(n*n!) O(nn!)
空间复杂度: O ( n ) O(n) O(n)

3. 题目53 最大子序列和

(1) 题目描述

在这里插入图片描述
在这里插入图片描述

扫描二维码关注公众号,回复: 13201317 查看本文章

(2) 思路

  这道简单题分治算法,卡了我好久…真简单…

(3) 题解

class Solution {
    
    
public:
    int maxSubArray(vector<int>& nums) {
    
    

        int result = nums[0];
        int sum = 0;
        
        for (int i = 0; i < nums.size(); i++)
        {
    
    
            if (sum < 0)
            {
    
    
                sum = 0;
            }
            sum += nums[i];
            result = (result < sum)?sum:result;
        }
        return result;
    }
};

结果:
在这里插入图片描述
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

参考

  1. 优化版竖式
  2. 回溯法全排列
  3. 最大子序列和

猜你喜欢

转载自blog.csdn.net/Fox_Alex/article/details/112751326
今日推荐