题解 | #牛群定位系统#

牛群定位系统

https://www.nowcoder.com/practice/d808aaa4c13c4d38bff333aa796e6a1e

知识点:回溯

这道题本身也属于一个普通的回溯寻找路径的问题,但是这道题的难点在于细节的处理上。题目要求找出符合要求的字符串,这就不同于普通的回溯,要找出所有的字符串,故我们使用Set集合来存储符合条件的字符串即可。还有一个点在于输出顺序并非是普通的按字典序排列,题目要求输出顺序为数组中的出现顺序,故我们需要使用一个Map来对数组中的字符串赋予权重,以便后续对结果的排序。

Java题解如下

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param board char字符型二维数组 
     * @param words string字符串一维数组 
     * @return string字符串一维数组
     */
    private int[][] dirs = new int[][]{{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
    private Set<String> res = new HashSet<>();
    private int m, n;
    private char[][] board;
    private boolean[][] visited;
    
    public String[] findWords (char[][] board, String[] words) {
        // write code here
        m = board.length;
        n = board[0].length;
        this.board = board;
        visited = new boolean[m][n];
        for(String word: words) {
            for(int i = 0; i < m; i++) {
                for(int j = 0; j < n; j++) {
                    backTracking(word, 0, i, j);
                }
            }
        }
        Map<String, Integer> map = new HashMap<>();
        for(int i = 0; i < words.length; i++) {
            map.put(words[i], i);
        }
        List list = new ArrayList<>(res);
        Collections.sort(list, (o1, o2) -> (map.get(o1) - map.get(o2)));
        String[] ans = new String[list.size()];
        for(int i = 0; i < res.size(); i++) {
            ans[i] = String.valueOf(list.get(i));
        }
        return ans;
    }

    private void backTracking(String word, int index, int x, int y) {
        if(x < 0 || x >= m || y < 0 || y >= n || visited[x][y] || word.charAt(index) != board[x][y]) {
            return;
        }
        if(index == word.length() - 1) {
            res.add(word);
            return;
        }
        visited[x][y] = true;
        for(int[] dir: dirs) {
            backTracking(word, index + 1, x + dir[0], y + dir[1]);
        }
        visited[x][y] = false;
    }
}

全部评论

相关推荐

威猛的小饼干正在背八股:挂到根本不想整理
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务