【2020.5.10今日编程】LeetCode 21.合并两个有序链表 + LeetCode 674.回文子串 + LeetCode 46.全排列

LeetCode 21.合并两个有序链表

简单

  • 题目:将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

  • 示例

输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4

  • 方法:双指针进行比较即可。
  • cpp代码实现
class Solution
{
	public:
		ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) 
		{
			if(l1 == NULL || l2 == NULL)
				return l1 ? l1 : l2;
			ListNode* newHead = new ListNode(-1);
			ListNode* ptr = newHead;
			while(l1 != NULL && l2 != NULL)
			{
				if(l1->val <= l2->val)
				{
					ptr->next = l1;
					l1 = l1->next;
				}
				else
				{
					ptr->next = l2;
					l2 = l2->next;	
				}
				ptr = ptr->next;
			}
			if(l1)
				ptr->next = l1;
			else
				ptr->next = l2;
			return newHead->next;
		}
};

LeetCode 674.回文子串

中等

  • 题目:给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
    具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。

  • 示例

输入: “abc”
输出: 3
解释: 三个回文子串: “a”, “b”, “c”.

输入: “aaa”
输出: 6
说明: 6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”.

  • 方法:从中心向两边扩展(说实话我第一次看到这个题以为让我判断是不是回文串,结果一看示例蒙了,所以说审题很重要)。
  • cpp代码实现
class Solution
{
	public:
		int count = 0;
		int countSubstrings(string s) 
		{
			if(s.size() == 0)
				return 0;
			for(int i = 0; i < s.size(); ++i)
			{
				helper(s, i, i);
				helper(s, i, i + 1);
			}
			return count;
		}
		void helper(string s, int left, int right)
		{
			while(left >= 0 && right < s.size() && s[left] == s[right])
			{
				--left;
				++right;
				++count;
			}
		}
};

LeetCode 46.全排列

中等

  • 题目:给定一个 没有重复 数字的序列,返回其所有可能的全排列。

  • 示例

输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]

  • 方法:dfs + 回溯 (这个真的是经典的组合了)!
  • cpp代码实现
class Solution
{
	public:
		vector<vector<int>>res;
		vector<vector<int>> permute(vector<int>& nums) 
		{
			vector<int>path;
			vector<bool>used(nums.size(), false);
			dfs(nums, path, used);
			return res;
		}
		void dfs(vector<int>& nums, vector<int>& path, vector<bool>& used)
		{
			if(nums.size() == path.size())
			{
				res.push_back(path);
				return ;
			}
				
			for(int i = 0; i < nums.size(); ++i)
			{
				if(!used[i])
				{
					used[i] = true;
					path.push_back(nums[i]);
					dfs(nums, path, used);
					path.pop_back();
					used[i] = false;
				}
			}
		}
};

写在最后
今天是母亲节呀~祝我妈母亲节快乐,包了小硕一个月的工资给妈妈发红包,希望以后,我能给妈妈更好的。最近可能在家待久了,腰疼。刚下单了糖果小姐的指甲油,心情变好一那么一点点,期待回来和小姐妹一起涂美美的指甲油!(这里快变成我的日记本了, 哈哈哈,不过应该也没有人会看到~~~)

你可能感兴趣的:(leetcode,算法)