相加演算法是我自己定義的名字,具體問題如下:假設每次迴圈返回乙個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之前加&
1int mindepth(treenode*root)
9void dfs(treenode* root, int &ans, int
k) 14
if (root->left || root->right)
15 k++;
16if (root->left)
17 dfs(root->left, ans, k);
18if (root->right)
19 dfs(root->right, ans, k);
20 }
1 #include2int
main()
3
1 #include2 sort(pairs.begin(), pairs.end(), (vector& a, vector&b) );
1 #include 2using
namespace
std;
3void swap(int &a, int &b)
8void perm(int list, int low, int
high)
14else20}
21}22int
main()23;
25 perm(list, 0, 4
);26
return0;
27 }
自己刷leetcode時遇到的一些小問題
這裡沒有採用middli start end 2 28 原因是避免當start和end很大的時候形成溢位 29 int middle start start end 2 set.add 如果有重複值會插入失敗 返回false hashmap 可以用來遞迴記憶化儲存 找缺失數 找出現一次數都是異或的經...
gedit一些小的新發現
寫應該還有一些人正在像我一樣用gedit呢。現在vim,gedit,guide三黨還是互相瞧不起呢。我寫這一篇是想稍微交流一下gedit的一些亂七八糟的玩意,非gedit黨勿噴。有些人連一些比較基礎的也不知道呢,誠當是普及一下了。會的也勿噴。當然有頹狗zkq之類的比我明白我就不說什麼了。首先ctrl...
leetcode刷mysql遇到的一些小tips
題目是刪除重複郵箱,抄的解答 因為mysql不允許同時對乙個表delete和select聯合操作select,所以會select乙個虛擬的表出來 delete from person where id notin select need.id from select min id as id fro...