[关闭]
@iar 2015-03-29T04:34:22.000000Z 字数 2270 阅读 96

leetcode中学习recursion

leetcode


  • N00t大神的recursion出神入化
  • LC中大量的recursion解法
  • recursion的关键在于代码结构, 以及param/return.

recursion的种类

简单的分有

1个rec. 以及简单三明治关系.

  1. void rec(){
  2. codeTD;
  3. rec();
  4. codeBU;
  5. }

1个rec. 但是在for loop里面的话, 会更有意思.

  1. void rec(){
  2. if (lastRow)
  3. res.add(path + s);
  4. for(i = 1; i < path.size(); i++){
  5. rec(path.append, res);
  6. path.delete;
  7. }
  8. }

1个recursion, 这次是在for each() 括号里面. 更有意思啦

  1. List<List<?> segmentRec(String s) {
  2. // do something
  3. for ( i ) {
  4. rest = s.substring(i)
  5. for (List<?> seg : segmentRec(rest)) {
  6. // do something
  7. }
  8. }
  9. return result;
  10. }

2个连续rec call. 有param, 有return

  1. int DFS(a, sum, minSum) {
  2. sum += a; // walking down the tree.
  3. if (lastRow && sum < minSum) return sum;
  4. else {
  5. minSum = DFS(a, sum, minSum); // 注意这里的赋值是minSum, 而不是其他var name. 所以跟着的第二条recursion中的minSum才会update.
  6. minSum = DFS(a, sum, minSum); // 这里的minSum用于DFS的return.
  7. }
  8. return minSum; // walking up the tree.
  9. }

2个不连续的rec call. 中间有code. 注意N00t和programCreek的一点区别

  1. Node rec(l, h) {
  2. mid = lo + (hi-lo)/2;
  3. leftNode = rec(lo, mid-1);
  4. middleCode;
  5. rightNode = rec(mid+1, hi);
  6. return root;
  7. }

3个rec call, 中间有code, 有param, 有返回.

  1. DFS(tri, row, col, HashMap){
  2. // base condition
  3. return min;
  4. if(Map.contains())
  5. min+= Math.min(DFS(Hashmap), DFS(Hashmap));
  6. else
  7. min+= Math.min(map.get(), DFS(HashMap));
  8. map.put(row, min);
  9. return min;
  10. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注