算法練習(6):牛客在線編程06 遞歸/回溯

package jz.bm;import java.io.PushbackInputStream;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;public class bm6 {/*** BM55 沒有重復項數字的全排列*/ArrayList<ArrayList<Integer>> res = new ArrayList<>();public ArrayList<ArrayList<Integer>> permute(int[] num) {if (num.length == 0) {return res;}Arrays.sort(num);boolean[] used = new boolean[num.length];Arrays.fill(used, false);dfs(num, used, new ArrayList<>());return res;}private void dfs(int[] num, boolean[] used, ArrayList<Integer> list) {if (list.size() == num.length) {res.add(new ArrayList<>(list));} else {for (int i = 0; i < num.length; i++) {if (used[i]) {continue;}used[i] = true;list.add(num[i]);dfs(num, used, list);used[i] = false;list.remove(list.size() - 1);}}}/*** BM56 有重復項數字的全排列*/public ArrayList<ArrayList<Integer>> permuteUnique(int[] num) {if (num.length == 0) {return res;}Arrays.sort(num);boolean[] used = new boolean[num.length];Arrays.fill(used, false);dfs56(num, used, new ArrayList<>());return res;}private void dfs56(int[] num, boolean[] used, ArrayList<Integer> list) {if (list.size() == num.length) {res.add(new ArrayList<>(list));} else {for (int i = 0; i < num.length; i++) {if (used[i]) {continue;}if (i > 0 && num[i] == num[i - 1] && used[i - 1]) {continue;}used[i]  = true;list.add(num[i]);dfs56(num, used, list);used[i] = false;list.remove(list.size() - 1);}}}/*** BM57 島嶼數量*/public int solve (char[][] grid) {int m = grid.length;if (m == 0) {return 0;}int n = grid[0].length;if (n == 0) {return 0;}int res = 0;for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == '1') {res++;dfs57(grid, m, n, i, j);}}}return res;}private void dfs57(char[][] grid, int m, int n, int i, int j) {grid[i][j] = '0';if (i - 1 >= 0 && grid[i - 1][j] == '1') {dfs57(grid, m, n, i - 1, j);}if (i + 1 < m && grid[i + 1][j] == '1') {dfs57(grid, m, n, i + 1, j);}if (j - 1 >= 0 && grid[i][j - 1] == '1') {dfs57(grid, m, n, i, j - 1);}if (j + 1 < n && grid[i][j + 1] == '1') {dfs57(grid, m, n, i, j + 1);}}/*** BM58 字符串的排列*/ArrayList<String> strings = new ArrayList<>();public ArrayList<String> Permutation(String str) {if (str == null || "".equals(str)) {return strings;}char[] chars = str.toCharArray();Arrays.sort(chars);boolean[] used = new boolean[chars.length];Arrays.fill(used, false);dfs58(chars, used, new StringBuilder());return strings;}private void dfs58(char[] chars, boolean[] used, StringBuilder stringBuilder) {if (stringBuilder.length() == chars.length) {strings.add(new String(stringBuilder));} else {for (int i = 0; i < chars.length; i++) {if (used[i]) {continue;}if (i > 0 && chars[i] == chars[i - 1] && used[i - 1]) {continue;}stringBuilder.append(chars[i]);used[i] = true;dfs58(chars, used, stringBuilder);used[i] = false;stringBuilder.deleteCharAt(stringBuilder.length() - 1);}}}/*** BM60 括號生成*/ArrayList<String> arrayList = new ArrayList<>();public ArrayList<String> generateParenthesis (int n) {if (n == 0) {return arrayList;}dfs60(n, 0, 0, new StringBuilder());return arrayList;}private void dfs60(int n, int left, int right, StringBuilder stringBuilder) {if (left == n && right == n) {arrayList.add(new String(stringBuilder));return;}if (left < n) {stringBuilder.append("(");dfs60(n, left + 1, right, stringBuilder);stringBuilder.deleteCharAt(left + right);}if (right < left && right < n) {stringBuilder.append(")");dfs60(n, left, right + 1, stringBuilder);stringBuilder.deleteCharAt(left + right);}}/*** BM61 矩陣最長遞增路徑*/int max = 0;public int solve (int[][] matrix) {int m = matrix.length;int n = matrix[0].length;//這題dfs不需要記錄visited, 因為能走的路徑是單向的for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {dfs61(matrix, m, n, i, j, 1);}}return max;}private void dfs61(int[][] matrix, int m, int n, int i, int j, int count) {if (i - 1 >= 0 && matrix[i - 1][j] > matrix[i][j]) {max = Math.max(count + 1, max);dfs61(matrix, m, n, i - 1, j, count + 1);}if (i + 1 < m &&  matrix[i + 1][j] > matrix[i][j]) {max = Math.max(count + 1, max);dfs61(matrix, m, n, i + 1, j, count + 1);}if (j - 1 >= 0 && matrix[i][j - 1] > matrix[i][j]) {max = Math.max(count + 1, max);dfs61(matrix, m, n, i, j - 1, count + 1);}if (j + 1 < n && matrix[i][j + 1] > matrix[i][j]) {max = Math.max(count + 1, max);dfs61(matrix, m, n, i, j + 1, count + 1);}}
}

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

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

相關文章

centos 7 安裝docker

系統配置&#xff1a; CentOS關閉selinux sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config關閉防火墻(可選)或者放行相應端口 systemctl stop firewalld.service && systemctl disable firewalld.service配置內核IP 轉發 net.ipv4.ip_forward1 dock…

Android學習之路(3) 布局

線性布局LinearLayout 前幾個小節的例程中&#xff0c;XML文件用到了LinearLayout布局&#xff0c;它的學名為線性布局。顧名思義&#xff0c;線性布局 像是用一根線把它的內部視圖串起來&#xff0c;故而內部視圖之間的排列順序是固定的&#xff0c;要么從左到右排列&#xf…

Android之版本號、版本別名、API等級對應關系(全)(一百六十二)

簡介&#xff1a; CSDN博客專家&#xff0c;專注Android/Linux系統&#xff0c;分享多mic語音方案、音視頻、編解碼等技術&#xff0c;與大家一起成長&#xff01; 優質專欄&#xff1a;Audio工程師進階系列【原創干貨持續更新中……】&#x1f680; 人生格言&#xff1a; 人生…

HTML詳解連載(4)

HTML詳解連載&#xff08;4&#xff09; 專欄鏈接 [link](http://t.csdn.cn/xF0H3)下面進行專欄介紹 開始嘍CSS定義書寫位置示例注意 CSS引入方式內部樣式表&#xff1a;學習使用 外部演示表&#xff1a;開發使用代碼示例行內樣式代碼示例 選擇器作用基礎選擇器標簽選擇器舉例特…

RISC-V公測平臺發布 · 7-zip 測試

簡介 7-Zip 是一個開源的壓縮和解壓縮工具&#xff0c;具有高壓縮比和快速解壓縮的特點。除了普通的文件壓縮和解壓縮功能之外&#xff0c;7-Zip 還提供了基準測試功能&#xff0c;通過壓縮和解壓縮大型文件來評估系統的處理能力和性能。 7-Zip 提供了一種在不同壓縮級別和多…

BUUCTF [MRCTF2020]Ezpop解題思路

題目代碼 Welcome to index.php <?php //flag is in flag.php //WTF IS THIS? //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95 //And Crack It! class Modifier {protected $var;publi…

運維監控學習筆記7

Zabbix的安裝&#xff1a; 1、基礎環境準備&#xff1a; 安裝zabbix的yum源&#xff0c;阿里的yum源提供了zabbix3.0。 rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm 這個文件就是生成了一個zabbix.repo 2、安…

流程挖掘in汽車丨寶馬的流程效能提升實例

汽車行業在未來10年里&#xff0c;可能會面臨比過去50年更多的變化。電動化、智能化、共享化和自動駕駛等方面的趨勢可能給企業流程帶來以下挑戰&#xff1a; 供應鏈管理-電動化和智能化的發展可能導致供應鏈中的零部件和系統結構發生變化&#xff0c;企業需要重新評估和優化供…

zookeeperAPI操作與寫數據原理

要執行API操作需要在idea中創建maven項目 &#xff08;改成自己的阿里倉庫&#xff09;導入特定依賴 添加日志文件 上邊操作做成后就可以進行一些API的實現了 目錄 導入maven依賴&#xff1a; 創建日志文件&#xff1a; 創建API客戶端&#xff1a; &#xff08;1&#xff09…

Springboot 實踐(5)springboot添加資源訪問目錄及目錄測試

前文講解了swagger測試服務控制器&#xff0c;實現了數據庫數據訪問&#xff0c;這些功能都是運行在后臺服務器上&#xff0c;實際用戶并不能直接調用接口獲取數據&#xff0c;即使用戶能夠利用接口獲取到數據&#xff0c;數據也是結構化數據&#xff0c;不能爭取轉化成用戶使用…

基于OFDM+64QAM系統的載波同步matlab仿真,輸出誤碼率,星座圖,鑒相器,鎖相環頻率響應以及NCO等

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 2.1 OFDM原理 2.2 64QAM調制 2.3 載波同步 5.算法完整程序工程 1.算法運行效果圖預覽 2.算法運行軟件版本 MATLAB2022a 3.部分核心程序 ............................................…

【從零學習python 】31.深入理解Python中的高階函數和閉包

文章目錄 高階函數定義一個變量指向函數高階函數函數做為另一個函數的參數函數作為另一個函數的返回值 閉包函數嵌套什么是閉包修改外部變量的值原因分析解決方案 進階案例 高階函數 在Python中&#xff0c;函數其實也是一種數據類型。 def test():return hello worldprint(t…

NestJs 中使用 mongoose

在 NestJS 中鏈接 MongoDB 有兩種方法。一種方法就是使用TypeORM來進行連接&#xff0c;另外一種方法就是使用Mongoose。 此筆記主要是記錄使用Mongoose的。所以我們先安裝所需的依賴&#xff1a; npm i nestjs/mongoose mongoose安裝完成后&#xff0c;需要在AppModule中引入…

SpringBoot后端服務開啟Https協議提供訪問(使用阿里云資源)

目錄 概述 申請/下載證書 部署證書 本地測試訪問 服務器部署訪問 最后/擴展 總結 概述 本篇博客說明如何將SpringBoot項目開啟Https協議提供訪問。 博文以步驟【申請/下載證書】&#xff0c;【部署證書】&#xff0c;【本地測試訪問】&#xff0c;【服務器部署訪問】 &a…

SIP/VoIP之常見的視頻問題

除了語音通話外&#xff0c;視頻通話也是SIP協議通話中重要的功能&#xff0c;在實際應用中&#xff0c;經常會遇到一些視頻問題&#xff0c;如下&#xff08;以h264為例&#xff09; 一、 己方未顯示對方視頻圖像 排查方法&#xff1a; 查看網絡抓包中有沒有發給已方的視頻…

LORA開發板采集溫濕度數據,連接PC上位機顯示和液晶屏顯示

一、準備材料 準備以下板子和器件 Lora開發板x2 USB數據線x2 OLED 屏幕x2 StLink下載器x1 母對母杜邦線x3 DHT11 x2 二、設備連接 如圖所示先將OLED 屏幕插入到開發板中 接著按照圖中所示的&#xff0c;將串口一以及lora的撥碼開關撥到指定方向 接著將USB數據線一端插入到…

SQL Server用sql語句添加列,添加列注釋

SQL Server用sql語句添加列&#xff0c;添加列注釋 微軟文檔&#xff1a; https://learn.microsoft.com/zh-cn/sql/relational-databases/tables/add-columns-to-a-table-database-engine?viewsql-server-ver15 alter table article add RedirectURL varchar(600) nu…

(七)Unity VR項目升級至Vision Pro需要做的工作

Vision Pro 概述 定位為混合現實眼鏡&#xff0c;對AR支持更友好 無手柄&#xff0c;支持手&#xff08;手勢&#xff09;、眼&#xff08;注視&#xff09;、語音交互 支持空間音頻&#xff0c;相比立體聲、環繞聲更有沉浸感和空間感 支持VR/AR應用&#xff0c;支持多種應用模…

八字精批API接口

接口平臺&#xff1a;https://api.yuanfenju.com/ 開發文檔&#xff1a;https://doc.yuanfenju.com/ 支持格式&#xff1a;JSON 請求方式&#xff1a;HTTP POST <?php//密鑰 $api_secret "wD******XhOUW******pvr"; //請求網關 $gateway_host_url "ht…

FPGA應用學習筆記-----復位電路(二)和小結

不可復位觸發器若和可復位觸發器混合寫的話&#xff0c;不可復位觸發器是由可復位觸發器饋電的。 不應該出現的復位&#xff0c;因為延時導致了冒險&#xff0c;異步復位存在靜態冒險 附加素隱含項&#xff0c;利用數電方法&#xff0c;消除靜態冒險 這樣多時鐘區域還是算異步的…