【LeetCode Hot100】回溯篇

前言

????????本文用于整理LeetCode Hot100中題目解答,因題目比較簡單且更多是為了面試快速寫出正確思路,只做簡單題意解讀和一句話題解方便記憶。但代碼會全部給出,方便大家整理代碼思路。


46. 全排列

一句話題意

????????給定一個無重復數字的序列,求序列的全排列。

一句話題解

????????dfs扔數求全排列。

class Solution {List<List<Integer>> ans;public List<List<Integer>> permute(int[] nums) {ans =new ArrayList<>();dfs(nums,new ArrayList<>(),new HashSet<>());return ans;}void dfs(int[] nums,List<Integer> arr,Set<Integer> u){if(arr.size() == nums.length){ans.add(new ArrayList<>(arr));return ;}for(int i=0;i<nums.length;i++){if(u.contains(nums[i]))continue;arr.add(nums[i]);u.add(nums[i]);dfs(nums,arr,u);arr.remove(arr.size()-1);u.remove(nums[i]);}}
}

78. 子集

一句話題意

????????給定一個數組,求數組中所有的子集。

一句話題解

????????二進制枚舉。

class Solution {public List<List<Integer>> subsets(int[] nums) {int n = nums.length;List<List<Integer>> ans = new ArrayList<>();for(int i=(1<<n)-1;i>=0;i--){List<Integer> arr = new ArrayList<>();int ii=i;for(int j=0;j<n;j++){if(ii%2==1)arr.add(nums[j]);ii/=2;}ans.add(arr);}return ans;}
}

17. 電話號碼的字母組合

一句話題意

????????給定一個舊電話上數字和字符的映射,問給定一串數字序列,可能的字母組合有哪些。

一句話題解

????????先將數字做映射,然后dfs組合即可。

class Solution {Map<Character, String> mp = new HashMap<>() {{put('2', "abc");put('3', "def");put('4', "ghi");put('5', "jkl");put('6', "mno");put('7', "pqrs");put('8', "tuv");put('9', "wxyz");}};public List<String> letterCombinations(String digits) {List<String> ans = new ArrayList<String>();if (digits.length() == 0) {return ans;}dfs(ans, digits, 0, new StringBuilder());return ans;}void dfs(List<String> ans,String digits,int i,StringBuilder s){if(i==digits.length()){ans.add(s.toString());return ;}String now=mp.get(digits.charAt(i));for(int j=0;j<now.length();j++){s.append(now.charAt(j));dfs(ans,digits,i+1,s);s.deleteCharAt(i);}}
}

39. 組合總和

一句話題意

????????給定一個數字序列和一個目標值,數字序列中每個可以取任意個,問組成目標值的所有組合。

一句話題解

????????DFS,如果沒有達到目標值,則盡量往里面扔值。

class Solution {public List<List<Integer>> combinationSum(int[] candidates, int target) {List<List<Integer>> ans = new ArrayList<>();List<Integer> c = new ArrayList<>();dfs(candidates, target, ans, c, 0);return ans;}public void dfs(int[] candidates, int target, List<List<Integer>> ans, List<Integer> c, int i) {if (i == candidates.length) {return;}if (target == 0) {ans.add(new ArrayList<Integer>(c));return;}dfs(candidates, target, ans, c, i + 1);if (target - candidates[i] >= 0) {c.add(candidates[i]);dfs(candidates, target - candidates[i], ans, c, i);c.remove(c.size() - 1);}}
}

22. 括號生成

一句話題意

????????構建所有滿足含有n對括號的括號序列。

一句話題解

????????dfs,優先放左括號,然后再放右括號。

class Solution {public List<String> generateParenthesis(int n) {List<String> ans = new ArrayList<String>();dfs(ans, new StringBuilder(), 0, 0, n);return ans;}public void dfs(List<String> ans, StringBuilder s, int l, int r, int n) {if (s.length() == n * 2) {ans.add(s.toString());return;}if (l < n) {s.append('(');dfs(ans, s, l + 1, r, n);s.deleteCharAt(s.length() - 1);}if (r < l) {s.append(')');dfs(ans, s, l, r + 1, n);s.deleteCharAt(s.length() - 1);}}
}

79. 單詞搜索

一句話題意

????????給定一個二維字符數組,規定每個字符只能使用一次,問給定的單詞是否出現在二維數組中過。

一句話題解

????????DFS,額外設定一個訪問數組即可。

class Solution {int n;int m;char[][] dt;boolean[][] v;String s;boolean flag=false;public boolean exist(char[][] board, String word) {this.n=board.length;this.m=board[0].length;this.dt=board;this.v=new boolean[n][m];this.s=word;for(int i=0;i<n;i++)for(int j=0;j<m;j++)v[i][j]=false;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(board[i][j]==word.charAt(0)){v[i][j]=true;dfs(i,j,1);v[i][j]=false;if(flag)return true;}}}return false;}int[][] fx={{0,1},{1,0},{-1,0},{0,-1}};void dfs(int i,int j,int idx){if(idx == s.length()){flag=true;return;}for(int k=0;k<4;k++){int ii=i+fx[k][0];int jj=j+fx[k][1];if(ii<0||ii>=n||jj<0||jj>=m||v[ii][jj]||dt[ii][jj]!=s.charAt(idx))continue;v[ii][jj]=true;dfs(ii,jj,idx+1);v[ii][jj]=false;}}
}

131. 分割回文串

一句話題意

????????給定一個字符串,可以任意分割字符串,求當進行分割后所有子串都是回文串的分割方式有哪些。

一句話題解

????????先DP求出所有回文子串,然后dfs進行分割。

class Solution {int n;boolean[][] dp;String s;List<String> arr;List<List<String>>ans;public List<List<String>> partition(String s) {this.s=s;this.n=s.length();this.dp=new boolean[n][n];this.ans=new ArrayList<>();this.arr=new ArrayList<>();for(int i=0;i<n;i++)for(int j=0;j<n;j++)dp[i][j]=true;for(int i=n-1;i>=0;i--){for(int j=i+1;j<n;j++){dp[i][j]= s.charAt(i) == s.charAt(j) && dp[i+1][j-1];}}dfs(0);return ans;}void dfs(int i){if(i==n){ans.add(new ArrayList(arr));return;}for(int j=i;j<n;j++){if(dp[i][j]){arr.add(s.substring(i,j+1));dfs(j+1);arr.remove(arr.size()-1);}}}
}

51. N 皇后

一句話題意

????????皇后的規則是可以吃相同行列、對角線的棋子,問所有滿足可以在棋盤上防止N個互不影響的皇后。

一句話題解

????????存三個set用于存哪個位置不能存,DFS即可。

class Solution {List<List<String>> ans = new ArrayList<>();List<String> arr = new ArrayList<>();Set<Integer> uy = new HashSet<>();Set<Integer> ul = new HashSet<>();Set<Integer> ur = new HashSet<>();int n;public List<List<String>> solveNQueens(int n) {this.n=n;dfs(0);return ans;}void dfs(int row){if(row==n){ans.add(new ArrayList<>(arr));return;}for(int i=0;i<n;i++){if(uy.contains(i)||ul.contains(row-i)||ur.contains(row+i))continue;StringBuffer s = new StringBuffer();for(int j=0;j<i;j++)s.append('.');s.append('Q');for(int j=i+1;j<n;j++)s.append('.');arr.add(new String(s));uy.add(i);ul.add(row-i);ur.add(row+i);dfs(row+1);uy.remove(i);ul.remove(row-i);ur.remove(row+i);arr.remove(arr.size()-1);}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78999.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78999.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78999.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pytest-前后置及fixture運用

1.pytest中的xunit風格前后置處理 pytest中用例的前后置可以直接使用類似于unittest中的前后置處理&#xff0c;但是pytest中的前后置處理方式更 加豐富&#xff0c;分為模塊級、類級、方法級、函數級等不同等級的前后置處理&#xff0c;具體見下面的代碼&#xff1a; test_…

使用scipy求解優化問題

一、求解二次規劃問題 min(X.T * P * X C.T * X) s.t. Xi > 0 ∑Xi 1 1.定義目標函數 def objective(x):return 0.5 * np.dot(x, np.dot(P, x)) np.dot(c, x)2. 定義等式約束 def equality_constraint(x):return np.sum(x) - 1 3.定義邊界約束&#xff1a;x # …

C++初階-STL簡介

目錄 1.什么是STL 2.STL的版本 3.STL的六大組件 4.STL的重要性 4.1在筆試中 4.2在面試中 4.3.在公司中 5.如何學習STL 6.總結和之后的規劃 1.什么是STL STL&#xff08;standard template library-標準模板庫&#xff09;&#xff1b;是C標準庫的重要組成部分&#xf…

kivy android打包buildozer.spec GUI配置

這個適合剛剛學習kivyd的道友使用&#xff0c;后面看情況更新 代碼 import tkinter as tk from tkinter import ttk, filedialog, messagebox, simpledialog import configparser import os import json # 新增導入class BuildozerConfigTool:def __init__(self, master):se…

MOOS-ivp使用(一)——水下機器人系統的入門與使用

MOOS-ivp使用&#xff08;一&#xff09;——水下機器人系統的入門與使用 MOOS-ivp&#xff08;Marine Operational Oceanographic System for Intelligent Vehicle Planning&#xff09;是專為水下機器人&#xff08;如AUV&#xff09;設計的開源框架。類似于ROS&#xff0c;…

電子病歷高質量語料庫構建方法與架構項目(智能質控體系建設篇)

引言 隨著人工智能技術的迅猛發展,醫療信息化建設正經歷著前所未有的變革。電子病歷作為醫療機構的核心數據資產,其質量直接關系到臨床決策的準確性和醫療安全。傳統的病歷質控工作主要依賴人工審核,存在效率低下、主觀性強、覆蓋面有限等問題。近年來,基于人工智能技術的…

react學習筆記4——React UI組件庫與redux

流行的開源React UI組件庫 material-ui(國外) 官網: http://www.material-ui.com/#/github: GitHub - mui/material-ui: Material UI: Comprehensive React component library that implements Googles Material Design. Free forever. ant-design(國內螞蟻金服) 官網: Ant…

GPU集群搭建

1. 硬件規劃與采購 GPU 服務器&#xff1a;挑選契合需求的 GPU 服務器&#xff0c;像 NVIDIA DGX 系列就不錯&#xff0c;它集成了多個高性能 GPU。網絡設備&#xff1a;高速網絡設備不可或缺&#xff0c;例如萬兆以太網交換機或者 InfiniBand 交換機&#xff0c;以此保證節點…

ZYNQ 純PL端邏輯資源程序固化流程

ZYNQ 純PL端邏輯資源程序固化 ZYNQ的程序固化流程比傳統的FPGA固化流程復雜很多&#xff0c;Vivado生成的bit文件無法直接固化在ZYNQ芯片中。因為ZYNQ 非易失性存儲器的引腳&#xff08;如 SD 卡、QSPI Flash&#xff09;是 ZYNQ PS 部分的專用引腳。這些非易失性存儲器由 PS …

[計算機科學#6]:從鎖存器到內存,計算機存儲的構建與原理

【核知坊】&#xff1a;釋放青春想象&#xff0c;碼動全新視野。 我們希望使用精簡的信息傳達知識的骨架&#xff0c;啟發創造者開啟創造之路&#xff01;&#xff01;&#xff01; 內容摘要&#xff1a;在上一篇文章中&#xff0c;我們深入了解了計算機如…

如何刪除Google Chrome中的所有歷史記錄【一鍵清除】

谷歌瀏覽器記錄了用戶訪問過的網站。這方便了查找&#xff0c;但有時也需要清理。刪除所有歷史記錄很簡單&#xff0c;只要按照以下步驟操作。 1. 打開谷歌瀏覽器 首先要啟動谷歌瀏覽器。點擊右上角的三個點&#xff0c;進入主菜單。 2. 進入歷史記錄界面 在菜單中找到“歷史…

關于瀏覽器對于HTML實體編碼,urlencode,Unicode解析

目錄 HTML實體編碼 URL編碼 Unicode編碼 解析層次邏輯 為什么<script></script>不可以編碼符號 為什么不能編碼JavaScript:協議 為什么RCDATA標簽中的都會被解析成文本 為什么HTML編碼了<>無法執行 HTML實體編碼 通過特殊語法&#xff08;<、>…

【數據分享】2020年中國高精度森林覆蓋數據集(免費獲取)

森林作為全球陸地生態系統的主體&#xff0c;分布面積廣、結構復雜&#xff0c;承擔著調節氣候、維護生態安全、改善環境等方面的重要作用。我國的森林資源豐富&#xff0c;據《中國森林資源報告&#xff1a;2014—2018》統計&#xff0c;我國森林覆蓋率已經達到23.04%。森林覆…

C語言學習之動態內存的管理

學完前面的C語言內容后&#xff0c;我們之前給內存開辟空間的方式是這樣的。 int val20; char arr[10]{0}; 我們發現這個方式有兩個弊端&#xff1a;空間是固定的&#xff1b;同時在聲明的時候必須指定數組的長度&#xff0c;一旦確定了大小就不能調整的。 而實際應用的過程中…

【深度學習-Day 2】圖解線性代數:從標量到張量,理解深度學習的數據表示與運算

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

首頁數據展示

排版 現在做首頁的排版&#xff0c;依舊是偷antd里面的東西 使用card包裹list的樣式 import React from react import axios import { Card, Col, Row, List } from antd import { EditOutlined, EllipsisOutlined, SettingOutlined } from ant-design/icons; import { Avat…

使用Set和Map解題思路

前言 Set和Map這兩種數據結構,在解決一些題上&#xff0c;效率很高。跟大家簡單分享一些題以及如何使用Set和Map去解決這些題目。 題目鏈接 136. 只出現一次的數字 - 力扣&#xff08;LeetCode&#xff09; 138. 隨機鏈表的復制 - 力扣&#xff08;LeetCode&#xff09; 舊…

嘗試leaflet+webassemly

前言 筆者在github發現rust版本的leaflet&#xff0c;發現是用wasm-bindgen包裝的&#xff0c;嘗試使用一下 Issues slowtec/leaflet-rshttps://github.com/slowtec/leaflet-rs 正文 準備 新建一個react項目&#xff0c;安裝rsw依賴 pnpm i -D vite-plugin-rsw cargo ins…

機器學習實戰,天貓雙十一銷量與中國人壽保費預測,使用多項式回歸,梯度下降,EDA數據探索,彈性網絡等技術

前言 很多同學學機器學習時總感覺&#xff1a;“公式推導我會&#xff0c;代碼也能看懂&#xff0c;但自己從頭做項目就懵”。 這次我們選了兩個小數據集&#xff0c;降低復雜度&#xff0c;帶大家從頭開始進行分析&#xff0c;建模&#xff0c;預測&#xff0c;可視化等&…

SQL數據庫系統全解析:從入門到實踐

一、數據庫世界入門指南 在數字時代&#xff0c;數據就像新時代的石油&#xff0c;而數據庫系統就是儲存和管理這些寶貴資源的倉庫。對于初學者來說&#xff0c;理解數據庫的基本概念是邁入這個領域的第一步。 數據庫本質上是一個有組織的數據集合&#xff0c;它允許我們高效…