get sum of NestedList是一道非常有名非常高频的的电面题
/**
* 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 2, one 2 at depth 1)
* Given the list {1,{4,{6}}} the function should return 27 (one 1 at depth 1, one 4 at depth 2, one 6 at depth2)
*/
/**
* 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<NestedInteger> getList();
}
private int getListSum(List<NestedInteger> lni, int depth) { int sum = 0; NestedInteger ni = null; while(lni.hasNext()){ ni = lni.next(); if(ni.isInteger()) sum += ni.getInteger() * depth; else sum += getListSum(ni.getList(), depth + 1); } return sum; } public int getSum(NestedInteger ni) { if(ni.isInteger()) return ni.getInteger(); else return getListSum(ni.getList(), 1); }