2020 10 23每天一刷

2021-10-25 03:27:03 字數 3596 閱讀 8438

思路:用遞迴的形式,列出所有可能的情況

#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

輸出:[

「((()))」,

「(()())」,

「(())()」,

「()(())」,

「()()()」

]當左括號的數目大於等於右括號的數目時,才能遞迴的加入右括號,否則就會不合法

**如下:

class

solution

private

:void

helper

(string item,

int left,

int right, vector

& result)

if(left >0)

if(left < right)}}

;

n 皇后問題研究的是如何將 n 個皇后放置在 n×n 的棋盤上,並且使皇后彼此之間不能相互攻擊。

上圖為 8 皇后問題的一種解法。

給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。

每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 『q』 和 『.』 分別代表了皇后和空位。

示例:輸入:4

輸出:[

[".q…", // 解法 1

「…q」,

「q…」,

「…q.」],

["…q.", // 解法 2

「q…」,

「…q」,

「.q…」]

]解釋: 4 皇后問題存在兩個不同的解法。

皇后彼此不能相互攻擊,也就是說:任何兩個皇后都不能處於同一條橫行、縱行或斜線上。
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)}}

};

思路:每次取兩個陣列中較小的那個數新增到result中去,然後移動指標。當只剩乙個陣列之後,就可以直接把剩下的陣列直接加入到新的result中去。

#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 來讀取輸入,不然提交...