力扣--矩阵中的路径

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。(连续)

深度搜索

int row,colum,length;
bool dfs(char **board,int i,int j,char *word,int l){
    if(i<0||j<0||i>=row||j>=colum||board[i][j]!=word[l]){
        return false;
    }
    if(l==length-1){
        return true;
    }
    char t=board[i][j];
    board[i][j]=0;
    bool tem=(dfs(board,i+1,j,word,l+1)||dfs(board,i,j+1,word,l+1)||dfs(board,i-1,j,word,l+1)||dfs(board,i,j-1,word,l+1));
    board[i][j]=t;
    return tem;
}
#include<string.h>
bool exist(char** board, int boardSize, int* boardColSize, char* word){
    length=strlen(word);
    colum=*boardColSize;
    row=boardSize;
    for(int i=0;i<row;i++){
        for(int j=0;j<colum;j++){
            if(dfs(board,i,j,word,0)){
                return true;
            }
        }
    }
    return  false;
}

链接:https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof

### 常见的Java LeetCode题目类型及解题思路 #### 题目类型概述 LeetCode上的Java题目涵盖了多种算法和数据结构的应用场景,主要包括数组操作、字符串处理、链表管理、树遍历以及动态规划等问题。以下是几种常见类型的描述: - **数组与矩阵**:涉及查找最大子序列、旋转图像等任务。 - **字符串匹配与编辑距离**:如判断回文串、计算两个字符串之间的最小编辑次数。 - **链表操作**:反转单向/双向链表节点顺序或者检测环形结构的存在与否。 - **二叉树及相关概念**:前序、中序、后序遍历;平衡判定;路径总和求解等等。 #### 示例一:两数之和 (Two Sum) 给定一个整型数组`nums` 和目标值 `target`, 找到数组中的两个不同位置 i,j 的元素使得它们相加等于 target, 返回这两个索引[i,j]. ```java public int[] twoSum(int[] nums, int target){ Map<Integer,Integer> map=new HashMap<>(); for(int i=0;i<nums.length;i++){ if(map.containsKey(target - nums[i])){ return new int[]{map.get(target - nums[i]),i}; } map.put(nums[i],i); } throw new IllegalArgumentException("No solution"); } ``` 此方法利用哈希映射来存储已经访问过的数值及其对应的下标,在后续迭代过程中快速定位是否存在满足条件的一对数字[^1]。 #### 示例二:最长公共前缀(Longest Common Prefix) 编写函数找出多个输入字符串列表中最长共有的起始部分。如果不存在这样的共同开头,则返回空字符"". ```java public String longestCommonPrefix(String[] strs) { if(strs==null||strs.length==0)return ""; String prefix=strs[0]; for(int i=1;i<strs.length;i++) { while(strs[i].indexOf(prefix)!=0){ prefix=prefix.substring(0,prefix.length()-1); if(prefix.isEmpty())return ""; } } return prefix; } ``` 通过逐步缩短候选词长度直至找到所有单词都共享的部分作为最终结果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值