专业

深圳网站优化客服热线:SEO

揭秘百度SEO快排7天上首页秘籍详情

深圳网站优化

当前位置:首页 > 技术教程

Leetcode: NO.79 单词搜索 回溯 - osc_cdixgndu的个人空间 - OSCHINA

来源: 作者: 访问次数:14

Leetcode: NO.79 单词搜索 回溯

o
 osc_cdixgndu 发布于 1分钟前
字数 420
阅读 0
收藏 0
点赞 0
评论 0

#2020云栖大会#阿里云海量offer来啦!投简历、赢阿里云限量礼品及阿里云ACA认证免费考试资格!>>>

题目

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例:

board =
[
  ['A','B','C','E'],
  ['S','F','C','S'],
  ['A','D','E','E']
]

给定 word = "ABCCED", 返回 true
给定 word = "SEE", 返回 true
给定 word = "ABCB", 返回 false
提示:

board 和 word 中只包含大写和小写英文字母。
1 <= board.length <= 200
1 <= board[i].length <= 200
1 <= word.length <= 10^3

链接:https://leetcode-cn.com/problems/word-search

解题记录

  • 回溯
  • 直接通过循环整个表找到第一个为出发点
  • 之后将判断出发点的四周有没有下一个字符,有的话换成’#’
  • 进入递归,直到word遍历完,返回true,否则false
/**
 * @author: ffzs
 * @Date: 2020/9/13 上午7:07
 */
public class Solution {
   
   
    int n, m;
    char[][] step;
    char[] seq;
    boolean isExist = false;
    int[][] direction = {
   
   {
   
   1,0}, {
   
   -1,0}, {
   
   0, 1}, {
   
   0,-1}};
    public boolean exist(char[][] board, String word) {
   
   
        n = board.length;
        m = board[0].length;
        step = board;
        seq = word.toCharArray();
        for (int i = 0; i < n; i++) {
   
   
            for (int j = 0; j < m; j++) {
   
   
                if (!isExist && seq[0] == step[i][j]) {
   
   
                    step[i][j] = '#';
                    dfs (1, i, j);
                    step[i][j] = seq[0];
                }
            }
        }
        return isExist;
    }


    private void dfs (int index, int i, int j) {
   
   
        if (!isExist) {
   
   
            if (index == seq.length) {
   
   
                isExist = true;
                return;
            }
            for (int[] dt : direction) {
   
   
                int ii = dt[0]+i;
                int jj = dt[1]+j;
                if (inRule(ii, jj) && step[ii][jj]== seq[index]) {
   
   
                    step[ii][jj] = '#';
                    dfs(index+1, ii, jj);
                    step[ii][jj] = seq[index];
                }
            }
        }
    }

    private boolean inRule (int i, int j) {
   
   
        return i>=0 && i<n && j>=0 && j<m;
    }
}

class Test {
   
   
    public static void main(String[] args) {
   
   
        char[][] board = {
   
   {
   
   'A','B','C','E'},{
   
   'S','F','C','S'},{
   
   'A','D','E','E'}};
        Solution solution = new Solution();
        System.out.println(solution.exist(board, "ABCCED"));
    }
}

在这里插入图片描述

  • 全面实用的SEO竞争对手研究
  • seo优化逻辑和品牌如何进行口碑建设
  • 「飞优seo」手把手教你如何安装宝塔面板
  • 移动端SEO优化应该注意的几点
  • 你不知道的SEO常见术语,万词霸屏带你深入了解!
  • seo如何获取长尾流量
  • 企业网站建设seo优化如何写好软文
  • SEO优化案例中常犯的7个错误
  • SEO需要抛弃老旧观点才能跟上节奏
  • SEO优化对一个企业的影响力有多大
  • 让您的网站提升排名的SEO四步策略
  • 单页网站怎么做SEO优化与推广
  • 评价分析、FB兴趣发现、客户管理、SEO相关,我们推荐这50个工具
  • 想让网站流量翻倍,那你会做seo优化吗
  • SEO搜索优化,你可以不做外链吗?
  • seo软文写作必备知识
  • 杭州优化公司教你怎样通过SEO做产品宣传推广?
  • 网站SEO标题规划操作,网页标题修改后应该怎么办?
  • 2020年10个步骤让你从SEO小白到专家
  • 企业网站建设seo优化排名不稳定是什么原因?
  • SEO优化|如何判断是否过度优化 爱帮网络总结五点
  • 当心SEO优化行业中的伪科学
  • SEO指南:学习如何对网站进行SEO
  • SEO常用的关键词扩展分析工具有哪些?
  • 新手SEO需要学习十大要点我们相信许多企业都知道SEO优化是非常重要的,当他们第一次进入互联网。他们希望通过搜索引擎的免费频道获得大量流量。那么如何学习搜索引擎优化呢?这里我们给你一些建议。 1、准备空间和域名 SEO有很多概念术语,当然,这些都是要记住的,但不建议死记硬背,而是在实践中(操作网站优化时)要记住,因为死记硬背很容易忘记,而且你也不会真正理解它的含义。因此,我们主张我们应该从学习SEO的第一天开始操作。学习SEO一定要实践,即使你学了2年SEO课程,如果你没有实践过,你只会成为SEO的理
  • 有效SEO优化攻略已备好,咨询、转化不再“愁”
  • SEO网站诊断怎么做?几点基本因素和大家分享
  • SEO指南:学习如何对网站进行SEO
  • 如何做好seo优化内链工作
  • 如何做好seo优化内链工作
  • 网站改版的SEO注意事项!
  • 网站SEO课程笔记整理版!
  • 外贸网站优化所需采用的SEO策略
  • 百度SEO优化,什么时间增加内容与反向链接?
  • SEO网站数据分析调整
  • 雇佣SEO公司前请尝试15个SEO技巧
  • 关于网站seo的几点小常识,你知道多少?
  • SEO内容策划和文案是根基
  • 什么是SEO文章?seo文章的作用方法
  • SEO优化外包公司该怎么选?