思路:用遞迴的形式,列出所有可能的情況
括號生成#include
"util.h"
using
namespace std;
void
mygenerate
(string item,
int n, vector
& result)
mygenerate
(item+
'(',n,result)
;//新增左括號繼續遞迴
mygenerate
(item+
')',n,result)
;//新增右括號繼續遞迴
}int
main()
}
數字 n 代表生成括號的對數,請你設計乙個函式,用於能夠生成所有可能的並且 有效的 括號組合。
示例:輸入:n = 3
輸出:[
「((()))」,
「(()())」,
「(())()」,
「()(())」,
「()()()」
]當左括號的數目大於等於右括號的數目時,才能遞迴的加入右括號,否則就會不合法
**如下:
n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。class
solution
private
:void
helper
(string item,
int left,
int right, vector
& result)
if(left >0)
if(left < right)}}
;
上圖為 8 皇后問題的一種解法。
給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。
每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 『q』 和 『.』 分別代表了皇后和空位。
示例:輸入:4
輸出:[
[".q…", // 解法 1
「…q」,
「q…」,
「…q.」],
["…q.", // 解法 2
「q…」,
「…q」,
「.q…」]
]解釋: 4 皇后問題存在兩個不同的解法。
皇后彼此不能相互攻擊,也就是說:任何兩個皇后都不能處於同一條橫行、縱行或斜線上。
思路:每次取兩個陣列中較小的那個數新增到result中去,然後移動指標。當只剩乙個陣列之後,就可以直接把剩下的陣列直接加入到新的result中去。class
solution
location.
push_back(""
);location[i]
.(n,
'.');}
generate(0
,n,location,result,mark)
;return result;
}private
:void
put_down_the_queen
(int x,
int y,vectorint>>
& mark)
;static
const
int dy=
; mark[x]
[y]=1;
for(
int i =
1; i < mark.
size()
;++i)}}
}private
:void
generate
(int k,
int n, vector
& location,
vector>
& result,
vectorint>>
& mark)
for(
int i =
0; i < n;
++i)}}
};
利用分治的思想,分解,求解,合併(合併和求解放在一起完成)#include
"util.h"
using
namespace std;
void
merge_two
(vector<
int>
& sub_vec1, vector<
int>
& sub_vec2,vector<
int>
& sub)
else
}while
(i < sub_vec1.
size()
)while
(j < sub_vec2.
size()
)}intmain()
; vector<
int> nums2=
; vector<
int> num;
merge_two
(nums1,nums2,num)
;for
(int i =
0; i < num.
size()
;++i)
}
**如下:
#include
"util.h"
using
namespace std;
void
merge_two
(vector<
int>
& sub_vec1, vector<
int>
& sub_vec2,vector<
int>
& sub)
else
}while
(i < sub_vec1.
size()
)while
(j < sub_vec2.
size()
)}void
merge_sort
(vector<
int>
&vec)
int mid = vec.
size()
/2; vector<
int> sub_vec1;
vector<
int> sub_vec2;
for(
int i =
0; i < mid;
++i)
for(
int i = mid; i < vec.
size()
;++i)
merge_sort
(sub_vec1)
;merge_sort
(sub_vec2)
; vec.
clear()
;merge_two
(sub_vec1,sub_vec2,vec);}
intmain()
;merge_sort
(nums1)
;for
(auto it : nums1)
}
每天一刷20200602
問題 寫出乙個程式,接受乙個正浮點數值,輸出該數值的近似整數值。如果小數點後數值大於等於5,向上取整 小於5,則向下取整。思路 其實就是實現乙個正浮點數的四捨五入,可以呼叫math.h中的round 函式直接完成,有點討巧。include include using namespace std in...
每天一刷20200603
問題 編寫乙個函式,計算字串中含有的不同字元的個數。字元在acsii碼範圍內 0 127 換行表示結束符,不算在字元裡。不在範圍內的不作統計。注意是不同的字元 思路 跟之前做過的乙個題相似,那個題是字串去重,稍作修改就行了。include include using namespace std in...
每天一刷20200605
昨天返校,沒有做題。問題 功能 等差數列 2,5,8,11,14 輸入 正整數n 0 輸出 求等差數列前n項和 返回 轉換成功返回 0 非法輸入與異常返回 1 思路 這個題其實就是簡單的等差數列求和,設定好初始項,然後控制好迴圈次數即可。ps 在處理輸入的時候要注意用while 來讀取輸入,不然提交...