算法题解记录

算法题解记录

这个帖记录的是一些让我觉得值得学习,自己解题的时候想不到的大佬思路,直接Respect给到



二进制手表

在这里插入图片描述
这道题数据量很少,直接枚举也可以完成,但是我看到这道题总想用回溯来做,但是思路显得很笨重,看提交详情的时候看到了一个大佬的代码,直接用数组来模拟灯亮的情况,这个思路非常值得我学习

用数组模拟灯亮:

// 直接把二进制的问题转换为数组累加问题
    int[] hours = new int[]{1,2,4,8,0,0,0,0,0,0};
    int[] minutes = new int[]{0,0,0,0,1,2,4,8,16,32};

回溯的方法体:

// 回溯的参数:num(需要点亮的灯,初始为turnedOn),index(点亮的下标)
// hour(小时数)minute(分钟数)
public void backTrack(int num,int index,int hour,int minute){
    // 剪枝操作
    if(hour > 11  || minute > 59) return;

    // 递归出口,当点亮到第0栈灯的时候,那么回溯所有数据
    if(num == 0){
        // 进行字符串拼接
        StringBuilder sb = new StringBuilder();
        sb.append(hour).append(':');
        if(minute < 10){
            sb.append('0');
        }
        sb.append(minute);
        res.add(sb.toString());
        //记得return终止掉
        return;
    }

    // 这里是从下标开始递归遍历
    for(int i = index; i < 10; i++){
    	// 这里模拟每次点亮一盏灯
        backTrack(num - 1, i + 1, hour + hours[i], minute + minutes[i]);
    }
}

单词接龙II

一道很顶的题目!单纯用BFS或者DFS 简单的优化都过不了,一种可行的办法是BFS+DFS,先遍历得到最短路径再用DFS爆搜结果。继续优化的话就是将每个节点的所有相邻节点保存到 HashMap 中,就省去了 DFS 再去找相邻节点的时间。

很顶的题解 直接看: 题解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值