leetcode 1096. brace-expansion-ii 花括号展开 II

题目

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

解法:c++ 递归, 笛卡尔积

//执行用时 :
//20 ms, 在所有 C++ 提交中击败了95.00%的用户(  速度不稳定,这是最快速度 :(  )
//内存消耗 :15.2 MB, 在所有 C++ 提交中击败了100.00%的用户

//考虑以下的思路: 逐层递归写法
//对于某个递归函数,返回当前函数的unordered_set结果,
//  以及一个int坐标,如果有}则表示右大括号的下一个坐标,否则一定是expression.size(),即超出范围
//此函数定义
//  unordered_set<string> res;表示此函数的结果,unordered_set<string> preset;表示当前的字符串集合
//首先循环读取字符
// 如果读取到逗号,那么把preset加到res上,当前坐标+1
// 如果读取到{号,那么递归下一层,把他的返回set乘到preset上,更新当前坐标至对应的右大括号的下一个坐标/或者字符串末尾
// 如果读取到}号,那么把preset加到res上,返回unordered_set:res以及int:当前坐标+1
// 否则(即字母),直接突进读取连续字母,然后把这个字符串乘到preset上,当前坐标=连续字母末尾 

//循环结束表示坐标到expression末尾了,那么把preset加到res上,返回unordered_set:res以及int:当前坐标(即expression末尾)

//入口函数调用这个递归函数,将返回值unordered_set转换成vector然后排个序

class Solution {
   
private:
	//add source to raw
	//加法
	void mergeAdd(unordered_set<string>& raw, const unordered_set<string>& source)
	{
   
		for (auto s : source) raw.insert(s);
	}

	//Mul source to raw
	
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值