大家好,我是晴天学长,一个简单的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的正确步骤。
- 变量的正确赋值。