写递归函数的正确思维方法

Problem 7:

Given a list, each element in the list can be a list or integer. flatten it into a simply list with integers.

Example

Given [1,2,[1,2]], return [1,2,1,2].

Given [4,[3,[2,[1]]]], return [4,3,2,1].

用递归来完成,根据已经给出的函数类型和功能计算,关于递归的写法,将大问题拆成最小子问题并提供解决最小子问题的方法:

/**
 * // This is the interface that allows for creating nested lists.
 * // You should not implement it, or speculate about its implementation
 * class NestedInteger {
 *   public:
 *     // Return true if this NestedInteger holds a single integer,
 *     // rather than a nested list.
 *     bool isInteger() const;
 *
 *     // Return the single integer that this NestedInteger holds,
 *     // if it holds a single integer
 *     // The result is undefined if this NestedInteger holds a nested list
 *     int getInteger() const;
 *
 *     // Return the nested list that this NestedInteger holds,
 *     // if it holds a nested list
 *     // The result is undefined if this NestedInteger holds a single integer
 *     const vector<NestedInteger> &getList() const;
 * };
 */
class Solution {
public:
    // @param nestedList a list of NestedInteger
    // @return a list of integer
    vector<int> flatten(vector<NestedInteger> &nestedList) {
        // Write your code here
        vector<int> target;
        int num = nestedList.size();
        for(int i = 0; i< num; i++){
            if(nestedList[i].isInteger())
              target.push_back(nestedList[i].getInteger());
            else{
                vector<NestedInteger> sub_list = nestedList[i].getList();
                auto temp = flatten(sub_list);
               target.insert(target.end(), temp.begin(), temp.end());
            }
        }
        return target;
            }
};
递归发现一篇讲的很好的文章,特此推荐:

写递归函数的正确思维方法


猜你喜欢

转载自blog.csdn.net/gulaixiangjuejue/article/details/79138510