蓝桥杯双周赛算法心得——数树数(dfs)

大家好,我是晴天学长,一个简单的dfs思想,需要的小伙伴可以关注支持一下哦!后续会继续更新的。


1) .数树数


2) .算法思路

代码的主要逻辑是:

1.使用Scanner读取输入的整数n和q,其中n表示测试用例的数量,q表示每个测试用例的步数。

2.使用循环遍历每个测试用例:

3.读取一个字符串s,该字符串由字符'L'和'R'组成,表示树的结构。

4.初始化ans为0,用于记录树的数目。

5.调用dfs方法进行深度优先搜索,传入参数s、初始的ans和步数1。

6.输出搜索结果并进行下一个测试用例的处理。

7.dfs方法是递归的深度优先搜索函数,它根据输入的字符串s和当前的ans和步数来计算树的数目。

具体逻辑如下:

1.如果当前步数对应的字符是'L',则树的数目按照公式(ans-1)*2+1计算。

2.如果当前步数对应的字符是'R',则树的数目按照公式(ans-1)*2+2计算。

3.如果当前步数是字符串s的最后一个字符的位置,则返回计算得到的树的数目。

4.增加步数step的值,并递归调用dfs方法,传入更新后的ans和步数。

5.返回递归调用的结果。


3).代码示例

java 复制代码
package LanQiaoTest.枚举;

import java.util.Scanner;

public class 数树数 {
    static int ans = 0;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int q = scanner.nextInt();
        for (int i = 0; i < q; i++) {
            String s = scanner.next();
            ans= 0;
            System.out.println(dfs(s, 1, 0));
        }
    }

    public static int dfs(String s, int ans, int step) {
        if (s.charAt(step) == 'L') {
            if (ans == 1) {ans = Math.max(1, ans-1);}
            else {
                ans=(ans-1)*2+1;
            }
        } else {
            ans = (ans-1)*2+2;
        }
        if (step==s.length()-1){
            return ans;
        }
        step++;
        ans=dfs(s,ans,step);
        return ans;
    }
}

5).总结

  • dfs的正确步骤。
  • 变量的正确赋值。
相关推荐
炽橙超真云1 分钟前
2D 工程图纸如何自动转成可编辑 3D 模型?拆解读图与建体两条技术路径(DXF/DWG/PDF 到 STEP)
算法·3d·工业智能·工业ai
夕除10 分钟前
redis--dict rehash
算法·哈希算法
云上先途125 分钟前
Agent 轨迹数据一般包含哪些内容,加工的核心目标是什么?
人工智能·算法·机器学习
佳木逢钺1 小时前
从火灾模拟到系统热寂:一个双非运维如何用零 GPU 推导出多智能体系统的终极死锁
人工智能·python·算法·多智能体
垆边人似月.1 小时前
网格最小代价路径,总代价不超过 budget
算法
虚无的纽扣1 小时前
【力扣刷题】第五天:将 x 减到 0 的最小操作数、最大连续1的个数 III
算法·leetcode·职场和发展
C++ 老炮儿的技术栈1 小时前
char 造成的数据溢出
linux·服务器·c语言·c++·算法·c
sqc233sqc1 小时前
第 J8 周:ResNeXt-50 算法解析
人工智能·算法
hanlin0311 小时前
刷题笔记:力扣第32题-最长有效括号
笔记·算法·leetcode
All for pursuit.11 小时前
【动态规划-21】312.戳气球
数据结构·c++·算法·leetcode·动态规划