原创 LeetCode第44題之 Wildcard Matching

思想主要參考這裏,但那裏是用char *保存的字符串,該字符串最後以’\0’字符結尾,故上述代碼中p字符串不會越界。而現在字符串是用的string保存,需要討論p字符串的下標是否越界。 C++代碼: #include <iost

原创 LeetCode 43題之 Multiply Strings

詳細的算法思路參見我以前的一篇博客:大整數相乘 C++代碼: #include <iostream> #include <string> #include <vector> using namespace std; class

原创 LeetCode第46題之 Permutations

主要的思想(深度優先搜索)和我這篇博客一樣:找出1到n所有不重複的排列,即n的全排列 #include <iostream> #include <algorithm> #include <vector> using namespa

原创 LeetCode第47.題之Permutations II

這題和上一題唯一的差別是數組多了重複的元素,所以我首先想到的是STL中計算排列組合關係的算法(這是我以前寫的一篇博客)(該算法也適合上一題),具體思想見那篇博客,下面我直接給出C++代碼: #include <iostream>

原创 幾種常見的排序算法實現

1. 插入排序 //插入排序 #include <iostream> using namespace std; //每次遍歷將第i個數插入到前i-1個數中(前i-1個數已排好序) void insertSort(int a[], int

原创 大整數的相加、相減和相乘

#include <iostream> #include <string> using namespace std; string _sub(string s1, string s2); //比較兩個正數的大小 inline int c

原创 把二叉樹打印成多行

題目:從上到下按層打印二叉樹,同一層的結點按從左到右的順序打印到一行。 分析:爲了把二叉樹的每一行單獨打印到一行裏,我們需要兩個變量:一個變量表示在當前層中還沒有打印的結點數,另一個變量表示下一層結點的數目。 struct Binary

原创 不用算術運算符實現兩個數的加法。

(1)先不考慮進位,按位計算各位累加(用抑或實現),得值a; (2)然後計算進位,並將進位的值左移,得值b,若b爲0,則a就是加法運算的結果,若b不爲0,則a+b即得結果(遞歸調用該函數); int add_no_arithm(int

原创 最小的k個數

輸入n個整數,找出其中最小的k個數。例如輸入4、5、1、6、2、7、3、8這8個數字,則最小的4個數字是1、2、3、4。 解法一(平均時間複雜度爲O(n)): 思想:基於partion函數來解決這個問題。如果基於數組的第k個數字來調整

原创 LeetCode第51題之 N-Queens

思路主要是參考我以前的一篇博客:8皇后問題的兩種解法,那篇博客思路寫的還比較詳細,建議看那篇博客。這裏我只用第一種解法實現該題。 下面給出C++源代碼: #include <iostream> #include <string> #in

原创 二叉樹的前序、中序、後序的遞歸與非遞歸遍歷算法實現

看代碼一目瞭然。 C++代碼: #include <iostream> #include <stack> #include <queue> using namespace std; //二叉樹節點 typedef struct Bit

原创 自定義類如何使用multiset進行排序

關鍵點:自定義類需要重載”<”運算符,並且 重載的函數”operator<”參數(如果傳的是引用)和函數的類型都要爲const。如果參數是非const對象的引用,則會報如下錯誤:二進制“<”: 沒有找到接受“const Interval”

原创 LeetCode第60題之Permutation Sequence

思想:給定數字n和k後,則(n-1)!表示最高一位固定時可表示的排列的種數,例如,當n=3時: “123” “132” “213” “231” “312” “321” 最高位分別爲1,2,3,時都對應兩種排列情況。,當k=1、

原创 vs中使用第三方庫的方法

debug版本 步驟如下: 首先,注意所給的庫是64位的還是32位的,將平臺與所給的庫的平臺保持一致。 (1) 工程下面新建一個“DLL”文件夾,將第三方庫所需的頭文件拷貝過來,然後在“DLL”文件夾中新建兩個文件夾,命名分別爲“de

原创 m階B+樹與m階B樹的主要差異在於:

在B+樹中,具有n個關鍵字的結點只含有n棵子樹,即每個關鍵字對應一棵子樹;而在B樹中,具有n個關鍵字的結點含有(n+1)棵子樹。 在B+樹中,每個結點(非根結點)關鍵字個數n的範圍是[m/2向上取整,m](根結點:1<=n<=m),在B