leetcode212. 单词搜索 II(java)

news2024/11/15 11:44:41

单词搜索 II

  • 单词搜索 II
    • 题目描述
    • 解题 回溯算法
    • 代码演示
  • 回溯算法

单词搜索 II

leetcode212 题 难度 困难
leetcode212. 单词搜索 II

题目描述

给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words, 返回所有二维网格上的单词 。
单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。

示例1:
在这里插入图片描述
输入:board = [[“o”,“a”,“a”,“n”],[“e”,“t”,“a”,“e”],[“i”,“h”,“k”,“r”],[“i”,“f”,“l”,“v”]], words = [“oath”,“pea”,“eat”,“rain”]
输出:[“eat”,“oath”]

示例2:
在这里插入图片描述输入:board = [[“a”,“b”],[“c”,“d”]], words = [“abcb”]
输出:[]

提示:
m == board.length
n == board[i].length
1 <= m, n <= 12
board[i][j] 是一个小写英文字母
1 <= words.length <= 3 * 104
1 <= words[i].length <= 10
words[i] 由小写英文字母组成
words 中的所有字符串互不相同

解题 回溯算法

数据范围只有 ,且 words 中出现的单词长度不会超过,可以考虑使用「回溯算法」。

回溯算法框架:
1.路径:也就是已经做出的选择。
2.选择列表:也就是你当前可以做的选择。
3.结束条件:也就是到达决策树底层,无法再做选择的条件。

result = []
def backtrack(路径, 选择列表):
    if 满足结束条件:
        result.add(路径)
        return
    
    for 选择 in 选择列表:
        做选择
        backtrack(路径, 选择列表)
        撤销选择

起始先将所有 words 出现的单词放到 Set 结构中,然后以 board 中的每个点作为起点进行爆搜(由于题目规定在一个单词中每个格子只能被使用一次,因此还需要一个 vis 数组来记录访问过的位置):
1.如果当前爆搜到的字符串长度超过 10,直接剪枝;
2.如果当前搜索到的字符串在 Set 中,则添加到答案(同时了防止下一次再搜索到该字符串,需要将该字符串从 Set 中移除)。

代码演示

class Solution {
      //记录目标词汇
    Set<String> set = new HashSet<>();
    //记录四个方向,上下 左右
    private int[][]dirs = new int[][]{{1,0},{-1,0},{0,1},{0,-1}};
    //记录长度
    int n ,m;
    //标记已经选择得
    boolean[][]vis = new boolean[13][13];
    //记录答案
    List<String> ans = new ArrayList<>();
    //维护一个全局的,方便进行回溯
    char[][]_board;

    /**
     * 单词搜索II
     * @param board
     * @param words
     * @return
     */
    public List<String> findWords(char[][] board, String[] words) {
        m = board.length;
        n = board[0].length;
        _board = board;
        for (String s : words){
            set.add(s);
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < m;i++){
            for (int j = 0; j < n;j++){
                vis[i][j] = true;
                sb.append(board[i][j]);
                dfs(i,j,sb);
                vis[i][j] = false;
                sb.deleteCharAt(sb.length() - 1);
            }
        }
        return ans;
    }

    /**
     * 回溯算法
     * @param i
     * @param j
     * @param sb
     */
    void dfs(int i,int j,StringBuilder sb){
        if (sb.length() > 10){
            return;
        }
        //收集答案
        if (set.contains(sb.toString())){
            ans.add(sb.toString());
            //已收集的答案删除掉
            set.remove(sb.toString());
        }
        //四个方向进行递归
        for (int[]d : dirs){
            int di = i + d[0];
            int dj = j + d[1];
            if (di < 0 || dj < 0 || di >= m || dj >= n){
                continue;
            }
            if (vis[di][dj]){
                continue;
            }
            vis[di][dj] = true;
            sb.append(_board[di][dj]);
            dfs(di,dj,sb);
            vis[di][dj] = false;
            sb.deleteCharAt(sb.length() - 1);
        }
    }

}

回溯算法

leetcode93. 复原 IP 地址

leetcode698. 划分为k个相等的子集

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/821369.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

苍穹外卖day12(完结撒花)——工作台+Spring_Apche_POI+导出运营数据Excel报表

工作台——需求分析与设计 产品原型 接口设计 工作台——代码导入 将提供的代码导入对应的位置。 工作台——功能测试 Apache POI_介绍 应用场景 Apache POI_入门案例 导入坐标 <!-- poi --><dependency><groupId>org.apache.poi</groupId><ar…

图解架构 | SaaS、PaaS、IaaS/aPaaS平台是什么?aPaaS与PaaS有什么区别?

参考 图解架构 | SaaS、PaaS、IaaS:https://www.51cto.com/article/717315.html aPaaS平台是什么&#xff1f;aPaaS与PaaS有什么区别&#xff1f;&#xff1a;https://developer.aliyun.com/article/718714 aPaaS和PaaS的区别是什么&#xff1f; aPaaS和PaaS都可以完成软件的…

06-向量的更多术语和表示法

向量 引入的概念&#xff1a;向量就是一组有序的数字, 我们在理解它的时候&#xff0c; 可以把它理解成是一个有效的线段&#xff0c;也可以把它理解成是空间中的一个点&#xff0c;那么与之相对应的一个数字&#xff0c;也就是我们在初等数学中学的一个一个数&#xff0c;我们…

【文生图系列】Runaway Gen-2试用体验

文章目录 风景示例动物示例人物动作示例 Runway旗下的视频生成产品Gen-1和Gen-2已彻底开放&#xff0c;任何人都可注册一个账号免费尝试。免费的时长是105s&#xff0c;每个视频生成4s。 看gen-2官网和各公众号放出来的示例&#xff0c;非常震撼&#xff0c;不禁感慨现在文生视…

在ChinaJoy里,看见数字经济“供给创造需求”新范本

作者 | 曾响铃 文 | 响铃说 “太爽了&#xff0c;没想到在这看到了武汉eStarPro战队现场打王者。” “真没想到这个跑步机&#xff0c;我戴上VR眼镜1秒穿越到鼓浪屿&#xff0c;居然在海边跑步。” “那个《头号赛车》好玩&#xff0c;超远距离控制真实车模在真实赛道飙车&…

[每日习题]动态规划——公共子串计算 通配符匹配——牛客习题

hello,大家好&#xff0c;这里是bang___bang_&#xff0c;本篇记录2道牛客习题&#xff0c;公共子串计算&#xff08;中等&#xff09;&#xff0c;通配符匹配&#xff08;较难&#xff09;&#xff0c;如有需要&#xff0c;希望能有所帮助&#xff01; 目录 1️⃣公共子串计算…

AI实战干货,用AI 5分钟做1本超清画质原创绘本

Hi~我是专注于AI技术教程和项目实战的赤辰。 上期给大家分享了用ChatGPT生产配音的方法教程&#xff0c;反馈还是很热烈的&#xff0c;今天给大家带来一个用ChatGPT 5分钟生产出高画质精品绘本的教程。目前就有朋友通过这个插件制作育儿绘本教材&#xff0c;然后在亚马逊和小红…

UE4 网格体闪烁问题解决

情形1 模型摆放共面导致闪烁 解决&#xff1a;模型的表面重叠引起的闪烁&#xff0c;将模型间距隔开1-2cm&#xff0c;视觉效果基本看不出来&#xff0c;但是能够很好解决表面山数艘问题。 情形2 模型建模时相接部分共面导致闪烁 解决&#xff1a;模型建模时不同组件使用过不…

用于紫外线消毒灯的LED驱动:数明深紫外消毒方案SLM201

用于紫外线消毒灯的LED驱动SLM201 应用于紫外线消毒灯的LED驱动。疫情过后让越来越多的人开始注重起个人健康&#xff0c;除了出门佩戴口罩外&#xff0c;对于居家消毒也越发重视起来。而居家消毒除了75%浓度酒精及各类消毒液外&#xff0c;利用紫外线灯给衣物表面、房间消毒也…

计算球体上一点指向球心的姿态

背景&#xff1a;最近有个需求&#xff0c;需要用相机拍摄一个物品&#xff0c;初始状态下相机在该物体正上方&#xff0c;随后相机的坐标按一定规律变化&#xff0c;要求它的视野中心一直固定在该物体上。这个问题可以理解为&#xff1a;以物品建立一个坐标系&#xff0c;相机…

C++ 类和对象篇(三) 空类和默认成员函数

目录 一、空类 二、6个默认成员函数 一、空类 1.是什么&#xff1f; 如果一个类中没有显示定义任何成员&#xff0c;简称为空类。 class A {};//一个空类 2.空类中的成员&#xff1f; 空类中真的什么都没有吗&#xff1f; 并不是&#xff0c;任何类在什么都不写时&#xff0c…

quickping探查在线设备的缺陷

在单位工作的一部分是网络维护&#xff0c;发现在单位淘汰win7后&#xff0c;大量win10&#xff0c;win11设备使用后&#xff0c;探查在线设备用的quickping越来越不靠谱&#xff0c;发现有时使用后探查后&#xff0c;没有使用的ip&#xff0c;配置后会出现ip冲突&#xff0c;决…

[Pytorch]卷积运算conv2d

文章目录 [Pytorch]卷积运算conv2d一.F.Conv2d二.nn.Conv2d三.nn.Conv2d的运算过程 [Pytorch]卷积运算conv2d 一.F.Conv2d torch.nn.functional.Conv2d()的详细参数&#xff1a; conv2d(input: Tensor, weight: Tensor, bias: Optional[Tensor]None, stride: Union[_int, _s…

Apache RocketMQ 远程代码执行漏洞(CVE-2023-33246)

漏洞简介 RocketMQ 5.1.0及以下版本&#xff0c;在一定条件下&#xff0c;存在远程命令执行风险。RocketMQ的NameServer、Broker、Controller等多个组件外网泄露&#xff0c;缺乏权限验证&#xff0c;攻击者可以利用该漏洞利用更新配置功能以RocketMQ运行的系统用户身份执行命…

BAPI_GOODSMVT_CREATE 更改凭证的创建人

凭证创建时(创建人)需要更改为其它人员 1. 复制BAPI_TE_XMKPF, 增加字段USNAM 2. SE18: BADI名称 - MB_BAPI_GOODSMVT_CREATE 创建badi实施 3. 增强代码编辑如下: method if_ex_mb_bapi_goodsmvt_create~extensionin_to_matdoc.data: lt_extension type standard table …

力扣320. 列举单词的全部缩写

单词的 广义缩写词 可以通过下述步骤构造&#xff1a;先取任意数量的 不重叠、不相邻 的子字符串&#xff0c;再用它们各自的长度进行替换。 例如&#xff0c;“abcde” 可以缩写为&#xff1a; “a3e”&#xff08;“bcd” 变为 “3” &#xff09; “1bcd1”&#xff08;“a…

Linux第六章之vim与gcc使用

一、Linux编辑器-vim使用 vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;而且还有一些新的特性在里面。例如语法加亮&#xff0c;可视化操作不仅可以在终端运行&#xff0c;也…

【数据分享】1999—2021年地级市各类交通工具的客货运量和拥有量数据(Shp/Excel格式)

1999-2021年地级市的人口相关数据、各类用地面积数据、污染物排放和环境治理相关数据、房地产投资情况和商品房销售面积、社会消费品零售总额和年末金融机构存贷款余额、地方一般公共预算收支状况、工业企业数、固定资产投资和对外经济贸易数据、科技创新指标数据、劳动力就业及…

软考中级信息安全工程师2023下半年报名时间及报名入口官网

软考中级信息安全工程师2023下半年考试时间&#xff1a; 2023年下半年软考中级信息安全工程师的考试时间为11月4日、5日。考试时间在全国各地一致&#xff0c;建议考生提前备考。共分两科&#xff0c;第一科基础知识考试具体时间为9:00-11:30&#xff1b;第二科应用技术考试具…

【Android Framework系列】第9章 AMS之Hook实现登录页跳转

1 前言 前面章节我们学习了【Android Framework系列】第5章 AMS启动流程和【Android Framework系列】第6章 AMS原理之Launcher启动流程&#xff0c;大概了解了AMS的原理及启动流程&#xff0c;这一章节我们通过反射和动态代理对不同Android版本下的AMS进行Hook&#xff0c;实现…