刷題小技巧(一)

2021-10-02 04:31:48 字數 1511 閱讀 4775

相加演算法是我自己定義的名字,具體問題如下:假設每次迴圈返回乙個int,第一次返回1,第二次返回2,第三次返回3,最後演算法的結果是123,如何計算?

這個 問題看似簡單其實有乙個問題,就是你並不知道迴圈的次數是多少,也就是說無法確定1乘以的究竟是10的幾次方,下面介紹兩種方法:

方法一:

用stack的思想,把每次迴圈的值都存在stack中,這樣以先進後出的性質,最後只需要每次pop出乙個值,先乘以1,再依次乘以10,100,1000即可算出123

方法二:

這個方法比較巧妙,就是令val=val*10+x;其中val初始化為0,x為每次迴圈的值。這樣的話就不需要借助額外的儲存空間了。

比如下面這段**,最後的輸出是ans,我需要ans隨著遞迴的每一層的進行都改變它的值,而且改變其真正的值,這時候就要在方法實現的時候在ans前面加上&。但是k是乙個臨時變數,在計算每一條路徑時都會有不同的值,我希望遞迴的每一層都會改變k的值,但是卻不影響上一層的遞迴,即這層遞迴結束後k還是原來上一層遞迴的值,這時候再在方法實現的時候就不需要在k之前加&

int

mindepth

(treenode* root)

void

dfs(treenode* root,

int&ans,

int k)

if(root-

>left || root-

>right)

k++;if

(root-

>left)

dfs(root-

>left, ans, k);if

(root-

>right)

dfs(root-

>right, ans, k)

;}

#include

intmain()

關注我,更多刷題小技巧送給你

#include

sort

(pairs.

begin()

, pairs.

end(),

(vector<

int>

& a, vector<

int>

& b)

);

#include

using

namespace std;

void

swap

(int

&a,int

&b)void

perm

(int list,

int low,

int high)

else}}

intmain()

;perm

(list,0,

4);return0;

}

刷題演算法小技巧

1.大數取餘 對於較大數快速取餘 引數 char s 為儲存大數的陣列 modnumber 為mod long long modnumber char s,int modnumber return sum 2.快速冪 極大數 取餘 對於較大數快速取餘 引數 a的b次方 對 c 取餘 long lon...

刷題筆記 小技巧

如果需要降序 bool cmp int x,int y 首先定義排序規則,然後使用過載。sort a,a len,cmp 對於結構體 strucr ebuf 1000 重寫操作符 定義在結構體內 bool operator const e b const cmp 函式 bool cmp e a,e ...

PTA刷題技巧

作用 刷題的時有時輸入的資料量太大,格式太繁瑣,每次除錯都得自己輸入資料,除錯的20 以上的時間都放在輸入資料上面了,考試黑框框不能複製。include include include include include include include include includeusing name...