剑指 Offer 58 - I. 翻转单词顺序 剑指 Offer 12. 矩阵中的路径

本文提供三种实现方法解决剑指Offer中翻转单词顺序的问题,并通过深度优先搜索解决矩阵中的路径问题。文章详细介绍了使用Java实现的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#剑指 Offer 58 - I. 翻转单词顺序

class Solution {
    public String reverseWords(String s) {
        //s.trim();
        String t=s.trim();
        //s.split(" ")  只能去除一个空格
        //s.split("\\s+") 去除一个或多个空格
        String[] str=t.split("\\s+");
        String res="";
        for(int i=str.length-1;i>=0;i--){
            res=res+str[i];
            if(i!=0) res=res+" ";
        }
        return res;
    }
}

方法二:

class Solution {
    public String reverseWords(String s) {
        int n=s.length();
        String res="";
        int flag=0;
        int i=0;
        while(i<n){
            if(s.charAt(i)==' '){
                i++;
            }else{
                String temp="";
                while(i<n && s.charAt(i)!=' '){
                    temp=temp+s.charAt(i);
                    i++;
                }
                if(flag==1){
                   temp=temp+" ";
                }
                res=temp+res;
                flag=1;
            }

        }
    return res;
    }
}

方法三:StringBuilder法

class Solution {
    public String reverseWords(String s) {
        String[] strs = s.trim().split(" "); // 删除首尾空格,分割字符串
        StringBuilder res = new StringBuilder();
        for(int i = strs.length - 1; i >= 0; i--) { // 倒序遍历单词列表
            if(strs[i].equals("")) continue; // 遇到空单词则跳过
            res.append(strs[i] + " "); // 将单词拼接至 StringBuilder
        }
        return res.toString().trim(); // 转化为字符串,删除尾部空格,并返回
    }
}

剑指 Offer 12. 矩阵中的路径

class Solution {
    public boolean exist(char[][] board, String word) {
     
      if(board.length==0||board[0].length==0) return false;
        //dfs回溯法
        char[] word1=word.toCharArray();
        boolean[][] used=new boolean[board.length][board[0].length];
        //return dfs(board,word1,used,0,0,0);
        for(int i=0;i<board.length;i++){
            for(int j=0;j<board[0].length;j++){
                 // 从 (0, 0) 点开始进行 dfs 操作,不断地去找,
                // 如果以 (0, 0) 点没有对应的路径的话,那么就从 (0, 1) 点开始去找
               if (dfs(board,word1,used,i,j,0)){
                   return true;
               }
            }
        }
        return false;
    }
    public boolean dfs(char[][] board,char[] word1,boolean[][] used,int i,int j,int start){
       // if(start==word1.length-1){
       //     return true;
       // }
        if(i<0||i>board.length-1||j<0||j>board[0].length-1||used[i][j]==true||board[i][j]!=word1[start]){
            return false;
        }
        //注意这个最后一个字符判断正确的前提是前面的条件都满足时,所以要放在后面
        if(start==word1.length-1){
           return true;
        }
        //利用used数组确保字母不能被重复利用
        used[i][j]=true;
        boolean ans=dfs(board,word1,used,i+1,j,start+1) ||
        dfs(board,word1,used,i,j+1,start+1) ||
        dfs(board,word1,used,i,j-1,start+1) ||
        dfs(board,word1,used,i-1,j,start+1) ;
        used[i][j]=false;
        return ans;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值