第七章 递归、DFS、剪枝、回溯等问题 ------------- 7.5 “逐步生成结果”之非数值型问题 (合法括号)

通灵学院|游戏设计研习10:迭代流程★(2000字) 通灵学院|研习10:游戏通过迭代提高★(2000字) 本文为暗夜琉璃NightRuri原创,侵权必究。 往期研习: 研习1:人类的需求与动机https://blog.csdn.net/ctq310396634/article/details/107509119 研习2:人类的外在人群特征https://blog.csdn.net/ctq310396634/article/details/107601600 研习3:人类的内在人群特征https://blog.csdn.net/ctq31... 阅读详情

题目一:

  输入括号对数,输出所有的合法组合,比如输入1,输出"()",输入3,输出"()()(), (()()), ()(()), (())(), ((()))"。

  思路:比如输入1,输出"()",那么输入2的话,我们就可以在输入1的基础上往左插入一对括号,往右插入一对括号以及把它用括号包含起来。这样的话左边和右边是相同的,我们可以用set集合来去除重复。画个示意图如下:

  代码:

import java.util.HashSet;
import java.util.Set;

public class 合法括号 {

    public static void main(String[] args) {
        Set<String> parenthesis = parenthesis(3);
        System.out.println(parenthesis);
        System.out.println("==============================");
        parenthesis = parenthesis1(3);
        System.out.println(parenthesis);
    }
    
    /* 逐步生成之递归解法 */
    public static Set<String> parenthesis(int n) {
        Set<String> s_n = new HashSet<>();
        if (n == 1) {
            s_n.add("()");
            return s_n;
        }
        Set<String> s_n_1 = parenthesis(n - 1);
        for (String eOfN_1 : s_n_1) {
            s_n.add("()" + eOfN_1);
            s_n.add(eOfN_1 + "()");
            s_n.add("(" + eOfN_1 + ")");
        }
        return s_n;
    }

    /* 迭代形式 */
    public static Set<String> parenthesis1(int n) {
        Set<String> res = new HashSet<>(); // 保存上次迭代的状态
        res.add("()");
        if (n == 1) {
            return res;
        }
        for (int i = 2; i <= n; i++) {
            Set<String> res_new = new HashSet<>();

            for (String e : res) {
                res_new.add(e + "()");
                res_new.add("()" + e);
                res_new.add("(" + e + ")");
            }
            res = res_new;
        }
        return res;
    }

}

  结果:

  注意:这儿的递归思路有误,会漏算。当n=4时,"(())(())"这种情况就打印不出来,不过上面的代码也算是给我们提供了一种递归的思路。下面写出正确的递归思路:   

  解题思路:括号对的合法序列,已经插入的左括号的数目大于等于右括号的数目。
   (1)插入左括号:剩余的括号中,还有左括号;
   (2)插入右括号:剩余的括号中,右括号的数目大于左括号的数目;

  代码及其结果:

public class 合法括号_1 {
    public static void printPar(int l, int r, char[] str, int count) {
        if (l < 0 || r < l)
            return;
        if (l == 0 && r == 0) {
            System.out.println(str);
        } else {
            if (l > 0) {
                str[count] = '(';
                printPar(l - 1, r, str, count + 1);
            }
            if (r > l) {
                str[count] = ')';
                printPar(l, r - 1, str, count + 1);
            }
        }

    }

    public static void main(String[] args) {
        int count = 4;
        char str[] = new char[count * 2];
        printPar(count, count, str, 0);
    }
}

//结果
/*
(((())))
((()()))
((())())
((()))()
(()(()))
(()()())
(()())()
(())(())
(())()()
()((()))
()(()())
()(())()
()()(())
()()()()
*/

题目二:

  判断一个括号字符串是否合法。

  思路:直接看代码即可,很容易懂,这里要注意一下中文括号和英文括号是不同的。

  代码:

public class Test {

    public static void main(String[] args) {
        System.out.println(chkParenthsis("()a()", 5));
        System.out.println(chkParenthsis("()()", 4));
        System.out.println(chkParenthsis(")())", 4));
        System.out.println(chkParenthsis("(())", 4));
        System.out.println("测试中文括号:"+chkParenthsis("()()", 4));
    }
    
    /**
     * 检查括号字符串是否合法
     * @param A 源串
     * @param n 源串长度
     * @return
     */
    public static boolean chkParenthsis(String A,int n){
        if(n%2!=0){
            return  false;
        }
        int count = 0;
        for (int i = 0; i < A.length(); i++) {
            if (A.charAt(i) == '('||A.charAt(i) == '(') {  // 避免中文括号
                count++;
            } else if (A.charAt(i) == ')'||A.charAt(i) == ')') {
                count--;
            } else
                return false;
            if (count < 0)
                return false;
        }
        return true;
    }
}

   结果:

python游戏开发,pygame开发的一款黑白迭代游戏(用于学习娱乐) pygame是一款python,2D游戏开发工具,包含图像、声音。建立在SDL基础上,允许实时电子游戏研发而无需被低级语言(如机器语言和汇编语言)束缚。 最近了解了一下,出于好奇,做了一款简易版本的黑白迭代游戏,自嗨。下面分享我的代码,用于学习。 这个小游戏是这个样子的 点击某一个格子后,该格子上下左右四个方向的格子会变换颜色,如果是白色就变为黑色,黑色就会变为白色 游戏有一个目标图形,点击空格可见,通过以上规则点击出目标图形则胜利 就是这个小游戏,下面是我的代码,很简单 首先要安装pygame,p 阅读详情

相关推荐

政府科技管理者如何提升科技成果转化项目进场交易的备案效率?.docx

政府科技管理者如何提升科技成果转化项目进场交易的备案效率?

最强大脑解密

最强大脑中的一些项目,属于看起来难,其实不难,我把我找到的技巧列出来。 最强大脑合集 一,盲填数独 这是最强大脑第一个模板题。 首先我们看到,填数字和填颜色的数学本质是一样的,只不过颜色的记忆可能难一丢丢。 那么整个问题分解成2个相同的子问题,所以我们只需要分析: 给定一个数字,填完其他80个数字,使之成为数独。 解密: 首先我们准备任意一个数独,为了方便记忆可以选一个最简单的: 这个数独是有多简单,我就不赘述了。 然后评委选定一个数字,比如选第6行第1列的数字是7,而我..

nameofcsdn的博客 1万+

科技中介服务机构如何通过智能体技术提升服务效率与专业度?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

《最强大脑第七季》之“黑白迭代”游戏代码(Python)

在看了上一期节目后,对黑白迭代这个项目的游戏产生了兴趣,也想自己玩玩,奈何没有渠道可以找到这个游戏,于是便自己尝试写了一个关于这个游戏的小程序。 一、游戏的基础设置 因为这个游戏的核心是方块,所以首先是给这个游戏一些基础的设定:背景和方块的大小,颜色等: Settings.py class Settings(): """ 存储《黑白迭代》的所有设置的类 """ def __init__(self): """ 初始化游戏的设置 """ # 屏幕设置

qq_40407990的博客 3134

山区道路边坡落石隐患检测数据集VOC+YOLO格式241张1类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

高空作业栏杆检测数据集VOC+YOLO格式230张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

生成非空集合(逐步生成结果递归)

1. 问题描述: 请编写一个方法,返回某集合的所有非空子集。 给定一个int数组A和数组的大小int n,请返回A的所有非空子集。 保证A的元素个数小于等于20,且元素互异 2. 在纸上进行简单分解问题之后我们发现有一种技巧。(从数组中的第一个元素和空集开始考虑,而且每次可以保持这个集合也可以向集合中添加当前元素) 先从简单一点的例子来着手进分析,数组A中的元素分别是1,2,3 假如...

二哈 562

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

ti-cgt-c2000-22.6.0.LTS-windows-x64-installer

判断括号是否匹配的递归与非递归实现

递归: int bracket(char *p, int count) { if (*p == '\0') return count; else if (*p == '(') return bracket(p + 1, count + 1); else if (count > 0 && *p == ')') return bracket(p + 1, count - 1);

neohe001 1157

光伏板太阳能板尘土灰尘脏污检测数据集VOC+YOLO格式1006张3类别.md

【重要提示】本页面仅为资源介绍,不含外部下载地址 亲爱的 优快云 用户: 感谢你浏览本资源页面,在这里提前向大家说明相关情况,避免后续产生误解。本资源我设置的初衷是 0 积分免费分享文档介绍,希望可以无偿给到有需要的朋友。但 优快云 平台存在自动调控机制,系统会根据资源下载热度、文件体积、平台规则等因素,自动修改资源所需下载积分,页面显示为 1 积分、2 积分或更高积分都属于平台自动调整结果,并非我手动修改设置,我没有权限自主锁定积分数值。 如果你打开页面后,发现下载所需积分不为 0,请务必谨慎考虑是否下载。一旦你支付积分完成下载,后续遇到资源内容和描述不符、文件损坏等问题,我无法承担对应的积分损失,也没有渠道为你办理积分退还。在此强烈建议,只有页面明确显示 0 积分的时候,再进行下载操作。 同时特别说明:这份资源介绍文案里,没有附带任何外部下载地址。资源本身是通过 优快云 官方上传通道上传的附件,正常情况下直接点击页面自带的下载按钮即可获取文件。页面找不到外部下载链接属于正常情况,并非资源缺失。 如果因为平台积分显示异常,导致你被扣取积分,积分退款、积分异常相关问题,请直接联系 优快云 官方客服咨询处理。平台规则由官方制定,我无法干预积分变动,望各位理解。

Node-Red系列教程——NodeRed通过OPC UA读取数据并写入mysql

NodeRed通opcua读取西门子数据并存入mysql

鲸鱼姐的专栏 1万+

Vue3 视频播放器完整指南 – @videojs-player/vue 从入门到精通

全面解析 Vue3 生态中最强大的视频播放解决方案 @videojs-player/vue。从基础安装到高级功能,涵盖自动播放、直播流、字幕支持等核心特性。提供完整的代码示例和最佳实践,助你快速构建专业的视频播放应用。

前端开发-前端技术分享 1426

LeetCode 20有效的括号

题目 给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: “()” 输出: true 示例 2: 输入: “()[]{}” 输出: true 示例 3: 输入: “(]” 输出: false 示例 4: 输入: “([)]” 输出: false 示例 5: 输入: “{[]}” 输出: true 代码 class Solut

cx_cs的博客 331

【WRF数据准备】气象驱动数据-ERA5再分析数据(Copernicus)

【WRF数据准备】气象驱动数据-ERA5再分析数据

WW、forever的博客 5536

使用Microsoft Print to PDF进行编程:创建PDF文件的简单方法

Microsoft Print to PDF是一种内置于Windows操作系统中的功能,它允许我们通过打印操作将任何可打印的内容保存为PDF文件。然后,我们使用Microsoft Print to PDF打印机进行打印操作,并将输出文件保存为指定的PDF文件。使用Microsoft Print to PDF功能是一种方便且简单的方法来创建PDF文件,无论是在个人使用还是在企业开发中,它都可以提供良好的支持和灵活性。请注意,如果你使用的是其他编程语言,你可以根据相应的打印机接口或库来实现类似的功能。

TechSavant的博客 1635

电动汽车太阳能车顶加装指南:原理、安装与应急价值

太阳能光伏技术通过光伏效应将光能转化为直流电能,其核心在于半导体材料的光生伏特效应。MPPT控制器通过实时追踪最大功率点,显著提升能量转换效率,这是车载太阳能系统的关键技术。在工程实践中,这一技术为电动汽车提供了宝贵的能源冗余,尤其在应对停放损耗和紧急补电场景中价值凸显。例如,通过为12V蓄电池涓流充电,可有效维持车辆基础功能,避免小电瓶亏电。本文聚焦于车载太阳能系统的后装方案,详细解析了从光伏板选型、MPPT控制器配置到安全接入车辆低压系统的完整实施路径,为车主提升车辆离线生存能力提供实用参考。

weixin_30321449的博客 520

还原 Windows 环境变量的默认值

有时候,我们可能需要还原环境变量的默认值,以修复可能的配置问题或恢复系统的正常运行。如果您只想还原某个特定的环境变量,可以跳过删除其他变量的步骤,仅删除需要还原的变量即可。在“环境变量”对话框中,继续向下滚动到“系统变量”部分。请注意,在执行以下步骤之前,您应该备份当前的环境变量设置,以便在需要时可以还原。在删除所有需要还原的环境变量后,点击“确定”按钮关闭“环境变量”对话框。在“用户变量”部分,选择需要还原的变量,然后点击“删除”按钮。在“高级”选项卡下方的“环境变量”部分,点击“环境变量”按钮。

PvDeveloper的博客 6342

生成括号

题设要求:如果有n对括号,它们一共有多少种组合呢? 譬如对于n=3n=3n=3,有以下5种情况: “((()))”, “(()())”, “(())()”, “()(())”, “()()()” 问题分析:一对括号表示左括号“(” 和右括号 “)”是成对出现的。 代码: /* * generate-parentheses * Given n pairs of parentheses...

冰美式的博客 254

信号处理仿真:自适应信号处理_(8).自适应信道均衡

在无线通信系统中,信道的多径效应和时变特性会导致信号的失真,从而影响通信质量。自适应信道均衡技术通过实时调整均衡器的参数,以补偿信道失真,提高信号的质量和可靠性。本节将详细介绍自适应信道均衡的原理、算法和实现方法,并通过具体的仿真例子来说明其应用。

2401_87715305的博客 1040

28、沉浸式体验技术:概念、类型与应用

本文全面介绍了沉浸式体验技术的概念、类型与应用。从双边滤波器的图像处理原理切入,系统阐述了VR、AR、MR、ER及数字孪生等核心技术的特点与区别,并通过丰富案例展示了其在商业、医疗、教育、旅游、房地产、物流等多个领域的实际应用。文章还分析了技术融合趋势、硬件升级方向、应用场景拓展潜力,同时探讨了数据处理、网络延迟、隐私安全等挑战及应对策略,最后以流程图和对比表格总结技术发展脉络,展望沉浸式技术推动社会进步的广阔前景。

wind6的博客 384

游戏迭代分析

游戏迭代既可使游戏质量优化成为生命力顽强的精品游戏并由此提升公司品牌,带动公司其他游戏的关注度,还可以帮助一款游戏获得新增用户,减少游戏研发成本等等利好。但同时迭代设计也存在阴暗面,当你不具有足够的经验,没有稳定游戏核心理念或美感,或者未正确使用迭代设计时,也会导致不良后果。下面简单谈下如何掌握游戏迭代法则。   一、了解游戏迭代的真正内涵   (1)游戏迭代的原理   根据Br

tyt1002的专栏 4552

Python之afdx包语法、参数和实际应用案例

Python 的 afdx 包是针对 AFDX 协议的轻量级开发工具,专注于 AFDX 数据帧的解析、构造、发送/接收、协议合规性校验等核心能力,广泛应用于航空电子设备测试、仿真、数据监控等场景。

王国平的博客 984

DFS-lintcode生成括号

组合的问题往往用DFS搜索,关键是如何组合能满足合法括号的条件,可以用图来进行思考:以n=3为例 A:由于n=3,只能有3个左括号,3个右括号,已经有了3个左括号,不能再放左括号了,故只能再往右侧走,得到((())) B:同上,(()(已经有3个左括号了,只能再放右括号,往C走,得到(()()) D:(())(已有3个左括号了,只能放右括号,得到(())() 继续往后,可以得到剩余的组合

lang的飞起的博客 515

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: ACM summary
下一篇: 2013年蓝桥杯真题
Estrellas_
博客等级 码龄9年 0粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值