首页 > 编程知识 正文

二进制手表深度优先搜索什么意思,二进制手表使用说明

时间:2023-05-04 06:32:46 阅读:261560 作者:3430

1. 问题描述:

二进制手表顶部有 4 个 LED 代表小时(0-11),底部的 6 个 LED 代表分钟(0-59)

每个 LED 代表一个 0 或 1,最低位在右侧

例如,上面的二进制手表读取 “3:25”。

给定一个非负整数 n 代表当前 LED 亮着的数量,返回所有可能的时间。

案例:

输入: n = 1返回: ["1:00", "2:00", "4:00", "8:00", "0:01", "0:02", "0:04", "0:08", "0:16", "0:32"]

注意事项:

输出的顺序没有要求。

小时不会以零开头,比如 “01:00” 是不允许的,应为 “1:00”。

分钟必须由两位数组成,可能会以零开头,比如 “10:2” 是无效的,应为 “10:02”

2. 思路分析:

① 首先是可以使用暴力破解的,使用双重循环,最外层循环可以表示的是时钟代表的亮的数量,最里面的循环表示的是分钟代表的亮的灯,在循环中进行判断并且计算看一下最后得到的时间是否符合实际的时间要求

② 除了使用暴力破解之外我们还可以使用其他的办法来解决,简单来分析一下问题,我们知道是手表中灯亮的数量,但是我们不知道可能亮的是哪几盏灯,所以我们应该要逐一尝试去点亮可能的灯进而凑出我们从控制台输入的灯得到数量,对于当前的等我们可以点亮也可以不点亮,所以可以发现这个是一个尝试的过程而且要尝试所有可能的结果,这个也是深度优先的特点,深度优先搜索最擅长的就是解决尝试的不确定性的问题,通常尝试找到所有可能的解最终解决问题,综上我们可以使用深度优先搜索去解决这个问题

③ 确定了解决的方法之后,大概的思路是是我需要尝试点亮当前的灯,也可以不点亮当前的灯,所以存在着两个平行的状态,

所以需要在for循环中进行递归求解去尝试点亮当前的等或者不点亮,为了操作数据的方便,我们可以声明一个数组来存放所有的灯代表的数值以便在最后进行输出

④ 确定好平行状态之后,根据实际问题确定方法中需要传递的参数,需要明确的是当前我们需要什么,可以发现当前我们需要知道的是点亮的灯的数量,当前已经点亮的灯表示的时钟是多少,当前点亮的灯表示的分钟是多少,因为这些我们都是最后需要进行判断时间是否合法而且需要传递点亮的灯的数量树为了在出口的时候进行判断这样我在尝试点亮的灯的时候满足点亮所有的灯之后那么应该进行return了

⑤ 总结一下:在遇到实际的问题的时候需要分析一下,问题的类型是什么,涉及到可能性问题的求解,一般是可以使用深度优先去解决的

3. 具体的代码如下:

import java.util.ArrayList;import java.util.List;import java.util.Scanner;public class Main {static int n;static int time[] = {1, 2, 4, 8, 1, 2, 4, 8, 16, 32};static List<String> res = new ArrayList<String>();public static void main(String[] args) {Scanner sc = new Scanner(System.in);n = sc.nextInt();while(n >= 10){System.out.println("你输入的灯亮的数目大于最大值");n = sc.nextInt();}dfs(0, 0, 0);for(String s : res){System.out.println(s);}sc.close();}private static void dfs(int lighted, int hour, int minute) {//递归的出口if(lighted == n){if(hour < 12 && minute <= 59){String h = Integer.toString(hour);String m = Integer.toString(minute);if(minute < 10){m = "0" + m; }res.add(h + ":" + m);}return;}for(int i = 0; i < time.length; i++){if(i < 4){dfs(lighted + 1, hour + time[i], minute);}else{dfs(lighted + 1, hour, minute + time[i]);}}}}

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。