【遞歸、搜索與回溯算法】專題一 遞歸

文章目錄

  • 0.理解遞歸、搜索與回溯
  • 1.面試題 08.06.漢諾塔問題
    • 1.1 題目
    • 1.2 思路
    • 1.3 代碼
  • 2. 合并兩個有序鏈表
    • 2.1 題目
    • 2.2 思路
    • 2.3 代碼
  • 3.反轉鏈表
    • 3.1 題目
    • 3.2 思路
    • 3.3 代碼
  • 4.兩兩交換鏈表中的節點
    • 4.1 題目
    • 4.2 思路
    • 4.3 代碼
  • 5. Pow(x, n) - 快速冪
    • 5.1 題目
    • 5.2 思路
    • 5.3 代碼

0.理解遞歸、搜索與回溯

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

1.面試題 08.06.漢諾塔問題

1.1 題目

題目鏈接
在這里插入圖片描述

1.2 思路

在這里插入圖片描述在這里插入圖片描述
在這里插入圖片描述

1.3 代碼

class Solution {
public:void hanota(vector<int>& a, vector<int>& b, vector<int>& c) {dfs(a, b, c, a.size());}void dfs(vector<int>& a, vector<int>& b, vector<int>& c, int n){if(n == 1){c.push_back(a.back());a.pop_back();return;}dfs(a, c, b, n - 1);c.push_back(a.back());a.pop_back();dfs(b, a, c, n - 1);}
};

2. 合并兩個有序鏈表

2.1 題目

題目鏈接
在這里插入圖片描述
在這里插入圖片描述

2.2 思路

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

2.3 代碼

class Solution {
public:ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {if(l1 == nullptr) return l2;if(l2 == nullptr) return l1;if(l1->val < l2->val){l1->next = mergeTwoLists(l1->next, l2);return l1;}else{l2->next = mergeTwoLists(l1, l2->next);return l2;}}
};

3.反轉鏈表

3.1 題目

題目鏈接
在這里插入圖片描述在這里插入圖片描述
在這里插入圖片描述

3.2 思路

在這里插入圖片描述
在這里插入圖片描述

3.3 代碼

class Solution {
public:ListNode* reverseList(ListNode* head) {if(head == nullptr || head->next == nullptr) return head;ListNode* newHead = reverseList(head->next);head->next->next = head;head->next = nullptr;return newHead;}
};

4.兩兩交換鏈表中的節點

4.1 題目

題目鏈接
在這里插入圖片描述
在這里插入圖片描述

4.2 思路

在這里插入圖片描述
在這里插入圖片描述

4.3 代碼

老方法-迭代

class Solution {
public:ListNode* swapPairs(ListNode* head) {if(head == nullptr || head->next == nullptr) return head;ListNode* newhead = new ListNode(0);newhead->next = head;ListNode* prev = newhead, * cur = head, * next = head->next, * nnext = next->next;while(cur && next){// 交換節點prev->next = next;next->next = cur;cur->next = nnext;// 移動prev、cur、next、nnextprev = cur;cur = nnext;if(cur) next = cur->next;if(next) nnext = next->next;}prev = newhead->next;delete newhead;return prev;}
};

新方法-遞歸

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode() : val(0), next(nullptr) {}*     ListNode(int x) : val(x), next(nullptr) {}*     ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* swapPairs(ListNode* head) {if(head == nullptr || head->next == nullptr) return head;ListNode* tmp = swapPairs(head->next->next);ListNode* newhead = head->next;head->next->next = head;head->next = tmp;return newhead;}
};

5. Pow(x, n) - 快速冪

5.1 題目

題目鏈接
在這里插入圖片描述

5.2 思路

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

5.3 代碼

方法一

class Solution {
public:double myPow(double x, int N) {double ret = 1;long long int n = N;// 如果 n 是負數,將其轉換為正數(即取絕對值),并將底數 x 變為  1/xif(n < 0){n = -n;x = 1/x;}while(n){// 檢查 n 的最低位是否為 1(通過 n & 1 判斷)。如果是 1,則將當前的 x 乘到 ret 中。這是因為當前位對應的冪需要被累乘到結果中。if(n & 1)ret *= x;// 將 x 平方(即 x *= x),相當于將指數翻倍。// 將 n 右移一位(即 n >>= 1),相當于去掉當前最低位,處理下一位。x *= x;n >>= 1;}return ret;}
};

方法二 - 遞歸

class Solution {
public:double myPow(double x, int n) {// -2^31 <= n <= 2^31// 當n是負的很大的數時,會越界,所以需要將N強轉成long longreturn n > 0 ? Pow(x, n) : Pow(1/x, - (long long)n);     }double Pow(double x, int n){if(n == 0) return 1.0;double tmp = Pow(x, n/2);return n % 2 == 0 ? tmp * tmp : tmp * tmp * x;}
};

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

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

相關文章

C#實現List導出CSV:深入解析完整方案

C#實現List導出CSV&#xff1a;深入解析完整方案 在數據交互場景中&#xff0c;CSV文件憑借其跨平臺兼容性和簡潔性&#xff0c;成為數據交換的重要載體。本文將基于C#反射機制實現的通用CSV導出方案&#xff0c;結合實際開發中的痛點&#xff0c;從基礎實現、深度優化到生產級…

字符串day7

344 反轉字符串 字符串理論上也是一個數組&#xff0c;因此只需要用雙指針即可 class Solution { public:void reverseString(vector<char>& s) {for(int i0,js.size()-1;i<j;i,j--){swap(s[i],s[j]);}} };541 反轉字符串 自己實現一個反轉從start到end的字符串…

Grafana XSSOpenRedirectSSRF漏洞復現(CVE-2025-4123)

免責申明: 本文所描述的漏洞及其復現步驟僅供網絡安全研究與教育目的使用。任何人不得將本文提供的信息用于非法目的或未經授權的系統測試。作者不對任何由于使用本文信息而導致的直接或間接損害承擔責任。如涉及侵權,請及時與我們聯系,我們將盡快處理并刪除相關內容。 前…

私服 nexus 之間遷移 npm 倉庫

本文介紹如何將一個 Nexus 特定倉庫中的 npm 包內容遷移到另一個 Nexus 特定倉庫。此過程適用于需要重構倉庫結構或合并倉庫的場景。 遷移腳本 以下是完整的遷移腳本&#xff0c;它會自動完成以下操作&#xff1a; 從源倉庫獲取所有 npm 包列表下載每個包的 .tgz 文件解壓并…

Django ToDoWeb 服務

我們的任務是使用 Django 創建一個簡單的 ToDo 應用程序,允許用戶添加、查看和刪除筆記。我們將通過設置 Django 項目、創建 Todo 模型、設計表單和視圖來處理用戶輸入以及創建模板來顯示任務來構建它。我們將逐步實現核心功能以有效地管理 todo 項。 Django ToDoWeb 服務 …

阿里云服務器遭遇DDoS攻擊?低成本第三方高防解決方案全解析

阿里云服務器因高性能和穩定性備受青睞&#xff0c;但其DDoS高防服務的價格常讓中小企業望而卻步。面對動輒每月數萬元的防護成本&#xff0c;許多用戶不禁疑問&#xff1a;能否通過第三方高防服務保護阿里云服務器&#xff1f;如何實現低成本高效防御&#xff1f; 本文將結合技…

2025山東CCPC補題

2025山東CCPC補題 目錄 2025山東CCPC補題K - UNO&#xff01; &#xff08;雙端隊列的簡單應用&#xff09;M - 第九屆河北省大學生程序設計競賽 &#xff08;二進制枚舉模擬&#xff09;J - Generate 01 String 感覺這場比賽的題目挺不錯的&#xff1b;沒有說那些為了算法而算…

體繪制學習

一、基本概念 體繪制是對一個三維物體數據進行采樣與擬合的過程。 在體繪制中用vtkVolume渲染數據 渲染數據類數據轉換類幾何渲染vtkActorvtkPolyDataMapper體渲染vtkVolumevtkVolumeRayCastMapper 體繪制常用算法如下。 光線投射法。 優點是可視化結果質量好。缺點是計算…

告別“盤絲洞”車間:4-20mA無線傳輸如何重構工廠神經網?

4-20ma無線傳輸是利用無線模塊將傳統的溫度、壓力、液位等4-20mA電流信號轉換為無線信號進行傳輸。這一技術突破了有線傳輸的限制&#xff0c;使得信號可以在更廣泛的范圍內進行靈活、快速的傳遞&#xff0c;無線傳輸距離可達到50KM。達泰4-20ma無線傳輸模塊在實現工業現場應用…

VB.NET與SQL連接問題解決方案

1.基本連接步驟 使用SqlConnection、SqlCommand和SqlDataReader進行基礎操作&#xff1a; vb.net Imports System.Data.SqlClient Public Sub ConnectToDatabase() Dim connectionString As String "ServermyServerAddress;DatabasemyDataBase;Integrated Security…

ElasticSearch--DSL查詢語句

ElasticSearch DSL查詢文檔 分類 查詢類型功能描述典型應用場景示例語法查詢所有匹配所有文檔&#xff0c;無過濾條件數據預覽/測試json { "query": { "match_all": {} } }全文檢索查詢對文本字段分詞后匹配&#xff0c;基于倒排索引搜索框模糊匹配、多字段…

DDR4讀寫壓力測試

1.1測試環境 1.1.1整體環境介紹 板卡&#xff1a; pcie-403板卡 主控芯片&#xff1a; Xilinx xcvu13p-fhgb2104-2 調試軟件&#xff1a; Vivado 2018.3 代碼環境&#xff1a; Vscode utf-8 測試工程&#xff1a; pcie403_user_top 1.1.2硬件介紹 UD PCIe-403…

在 Windows 上使用 WSL 安裝 Ansible詳細步驟

在 Windows 上使用 WSL&#xff08;Windows Subsystem for Linux&#xff09; 安裝 Ansible 是目前最推薦的方式&#xff0c;因為 Ansible 本身是為 Linux 環境設計的&#xff0c;不支持原生 Windows 作為控制節點。 下面是一個 詳細步驟指南 &#xff0c;幫助你在 Windows 上…

編寫第一個ros程序

1.下載VScode 下載鏈接如下&#xff1a; Download Visual Studio Code - Mac, Linux, Windows 下載ARM64下的.deb文件 打開虛擬機&#xff0c;再rosnoetic下新建一個文件夾VSCODE&#xff0c;將windows下的文件導入該文件夾下如下圖。 在該文件夾下右鍵選擇在終端中打開 輸入…

代碼隨想錄算法訓練營第60期第四十九天打卡

大家好&#xff0c;今天我們還是繼續我們的動態規劃章節&#xff0c;可能有的朋友已經開始厭倦了說為什么動態規劃怎么這么多題目&#xff0c;大家可以想想我們前面其實刷過好幾種類型的動態規劃的經典題目比如說各式各樣的背包問題當然包括0-1背包&#xff0c;完全背包&#x…

centos7.9離線升級內核到4.19.12詳細教程

cenots7.9默認安裝的內核版本是:3.10.0-1160.119.1.el7.x86_64,在安裝nvidia顯卡驅動的時候,提示內核版本過低,需要升級內核版本,升級完成之后,就可以順利的安裝上nvidia顯卡驅動了,實測有效。 一、查看當前內核版本命令 uname -r二、下載離線內核的rpm包

Vue3 + TypeScript + el-input 實現人民幣金額的輸入和顯示

輸入人民幣金額的參數要求&#xff1a; 輸入要求&#xff1a; 通過鍵盤&#xff0c;只允許輸入負號、小數點、數字、退格鍵、刪除鍵、方向左鍵、方向右鍵、Home鍵、End鍵、Tab鍵&#xff1b;負號只能在開頭&#xff1b;只保留第一個小數點&#xff1b;替換全角輸入的小數點&a…

方正字庫助力華為,賦能鴻蒙電腦打造全場景字體解決方案

2025年5月19日&#xff0c;搭載華為鴻蒙操作系統的鴻蒙電腦&#xff0c;面向用戶推出集AI智能、互聯流暢、安全保障和精致體驗于一體的全新辦公系統。作為鴻蒙生態核心字體服務商&#xff0c;方正字庫為此次提供了全面的系統字體支持&#xff0c;涵蓋中文、西文及符號三大類字庫…

PHPStudy 一鍵式網站搭建工具的下載使用

目錄 一、下載 PHPStudy二、安裝步驟三、基本使用方法3.1 創建網站3.2 管理數據庫3.3 軟件管理3.4 自動啟動3.5 配置管理 四、注意事項和進階使用4.1 注意事項4.2 進階使用 背景&#xff1a; 我們在學習和工作中&#xff0c;經常會遇到各種需要自己搭建環境的場景&#xff0c;這…

java中的線程安全的集合

1.ConcurrentHashMap。 key,value結構。 jdk1.7通過分段鎖保證不同段同時操作是線程安全的&#xff0c;但并發不足&#xff0c;jdk1.8通過node節點鎖和CAS保證并發安全。不同node節點可以并發讀寫。通過它的computer,computerIfAbsent,等可以保證原子更新value。ifAbsent表示有…