相加演算法是我自己定義的名字,具體問題如下:假設每次迴圈返回乙個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...