[LinkedIn] Reversed Nested Integer

/**
* 这道题我加了个变形,reversed的
* Given a nested list of integers, returns the sum of all integers in the list weighted by their depth
* For example, given the list {{1,1},2,{1,1}} the function should return 10 (four 1’s at depth 1, one 2 at depth 2)
* Given the list {1,{4,{6}}} the function should return 27 (one 1 at depth 3, one 4 at depth 2, one 6 at depth 1)
*/
/**
* This is the interface that represents nested lists.
* You should not implement it, or speculate about its implementation.
*/
public interface NestedInteger
{
    // Returns true if this NestedInteger holds a single integer, rather than a nested list
    public boolean isInteger();

    // Returns the single integer that this NestedInteger holds, if it holds a single integer
    // Returns null if this NestedInteger holds a nested list
    public Integer getInteger();

    // Returns the nested list that this NestedInteger holds, if it holds a nested list
    // Returns null if this NestedInteger holds a single integer
    public List getList();
}

解答

int calWeightedSum(MyNestedInteger ni) {
    if(ni == null) {
        return 0;
    }
    else {
        if(ni.isInteger()) {
            return ni.getInteger()
        } else {
            int depth = ni.getDepth(ni.getList());
            getListSum(ni.getList(), depth);
        }
    }
}

int getListSum(List<MyNestedInteger> li, int curDepth) {
    int ret = 0;
    for(MyNestedInteger ni : li) {
        if(ni.isInteger()) {
            ret += ni.getInteger() * curDepth;
        } else {
            ret += getListSum(ni.getList(), curDepth-1);
        }
    }
    return ret;
}

int getDepth(List<MyNestedInteger> li) {
    int greatestDepth = 0;
    for(MyNestedInteger ni : li) {
        if(ni.isInteger()) {
            if(greatestDepth < 1) {
                greatestDepth = 1;
            } 
        } else {
            int d = getDepth(li.getList());
            if(greatestDepth < d){
                greatestDepth = d;
            }
        }
    }
    return greatestDepth;
}
posted on 2015-03-30 23:13  Seth_L  阅读(934)  评论(0编辑  收藏  举报