Day 30回溯06

332.重新安排行程

题目链接:332. 重新安排行程 - 力扣(LeetCode)

class Solution {
    private Deque<String> res;//最后路径
    private Map<String, Map<String, Integer>> map;//机场映射,int来判断要使用目的地几次

    public List<String> findItinerary(List<List<String>> tickets) {
        map = new HashMap<String, Map<String, Integer>>();
        res = new LinkedList<>();
        for(List<String> t : tickets){
            Map<String, Integer> temp;//存放终点站,并有几个指向
            if(map.containsKey(t.get(0))){
                //map中已有从t起飞的对象
                temp = map.get(t.get(0));//得到t对应的终点站,t对应多个终点站
                temp.put(t.get(1), temp.getOrDefault(t.get(1), 0) + 1);//加入t的终点站,在temp中找t终点站的value+1
            }else{
                //map中没有从t起飞的对象
                temp = new TreeMap<>();//升序Map
                temp.put(t.get(1), 1);
            }
            map.put(t.get(0), temp);

        }//map获得所有映射关系
        res.add("JFK");
        backTracking(tickets.size());
        return new ArrayList<>(res);
    }
    
    private boolean backTracking(int ticketNum){
        if(res.size() == ticketNum + 1){
            return true;
        }
        String last = res.getLast();
        if(map.containsKey(last)){//防止出现null
            for(Map.Entry<String, Integer> target : map.get(last).entrySet()){//由于map的val也是映射,所以遍历用entrySet
                int count = target.getValue();
                if(count > 0){
                    res.add(target.getKey());
                    target.setValue(count - 1);
                    if(backTracking(ticketNum)) return true;
                    res.removeLast();
                    target.setValue(count);
                }
            }
        }
        return false;
    }
}

51. N皇后

题目链接:51. N 皇后 - 力扣(LeetCode)

思路:双层数组填充

char[][] chessboard = new char[n][n];
for (char[] c : chessboard) {
    Arrays.fill(c, '.');
}
其实不难,难点在于数据的处理和储存
class Solution {
    List<List<String>> result = new ArrayList<>();

    public List<List<String>> solveNQueens(int n) {
        char[][] chessborad = new char[n][n];
        for(char[] c : chessborad){
            Arrays.fill(c,'.');
        }

        backTracking(n,0,chessborad);
        return result;
    }

    private void backTracking(int n, int row, char[][] chessborad){
        if(row == n){
            result.add(chessboradToList(chessborad));
            return;
        }

        for(int col = 0; col < n; col++){
            if(isValid(row, col, n, chessborad)){//能保证一行只有一个Q
                chessborad[row][col] = 'Q';
                backTracking(n,row+1,chessborad);
                chessborad[row][col] = '.';
            }
        }
    }

    private List<String> chessboradToList(char[][] chessborad){
        List<String> list = new ArrayList<>();
        for(char[] c : chessborad){
            list.add(String.copyValueOf(c));
        }
        return list;
    }

    private boolean isValid(int row, int col, int n, char[][] chessborad){
        for(int i = 0; i < row; i++){//同列有没有Q
            if(chessborad[i][col] == 'Q'){
                return false;
            }
        }

        for(int i = row-1,j = col-1; i >= 0 && j >= 0; i--,j--){//斜45
            if(chessborad[i][j] == 'Q'){
                return false;
            }
        }

        for(int i = row-1,j = col+1; i >= 0 && j <= n-1; i--, j++){
            if(chessborad[i][j] == 'Q'){
                return false;
            }
        }

        return true;


    }
}

37. 解数独

题目链接:

相关推荐

  1. Day 30回溯06

    2024-03-25 04:42:02       22 阅读
  2. day27 回溯03

    2024-03-25 04:42:02       47 阅读
  3. Day 29 回溯05

    2024-03-25 04:42:02       18 阅读
  4. Day 24 回溯算法01

    2024-03-25 04:42:02       20 阅读
  5. Day25- 回溯算法part05

    2024-03-25 04:42:02       38 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-25 04:42:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-25 04:42:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-25 04:42:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-25 04:42:02       20 阅读

热门阅读

  1. flink的MaxOutOfOrderness 和 Allowedlateness 区别

    2024-03-25 04:42:02       20 阅读
  2. 【Swift】如何让实例对象像函数一样使用

    2024-03-25 04:42:02       22 阅读
  3. ftp协议的彻底研究

    2024-03-25 04:42:02       17 阅读
  4. c++和c语言的区别实例

    2024-03-25 04:42:02       18 阅读
  5. 再次度过我的创作纪念日

    2024-03-25 04:42:02       15 阅读
  6. MySQL索引介绍

    2024-03-25 04:42:02       18 阅读
  7. Qt笔记 事件分发

    2024-03-25 04:42:02       18 阅读
  8. Qt:使用ctrl+z快捷键取消文本框修改

    2024-03-25 04:42:02       16 阅读
  9. Android Selinux详解[七]--如何给可执行程序bin加标签

    2024-03-25 04:42:02       15 阅读
  10. ES间的导数脚本

    2024-03-25 04:42:02       17 阅读
  11. clickhouse介绍

    2024-03-25 04:42:02       20 阅读