Online Judge Solutions

Wednesday, December 17, 2014

Sum of Nested Integers

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, and one 6 at depth 3)

 
/** 
 * 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 valueit(NestedInteger root, depth) {
  int val=0;
  if(root.isInteger()) {
    val+=n.getInteger();
  }
  else {
    List nlist=n.getList();
    for n in nlist {
      if(n.isInteger()) {
        val+=n.getInteger();
      }
      else {
        val+=valueit(n,depth+1);
      }
    }      
  }
  return val;
}
 
int getWeightedSum(const char* str)
{
   int sum = 0;
   int depth = 0;
   for(;*str; str++)
   {
       if (*str == '{')
       {
          depth++;
       }
       else if (*str == '}')
       {
          depth--;
       }
       else if (*str != ',')
       {
          int nested_sum = 0;
          while(*str >= '0' && *str <= '9')
          {
              nested_sum += nested_sum * 10 + (*str - '0');
              str++;
          }
          sum+=nested_sum * depth;
       }
   }
   return sum;
}

No comments:

Post a Comment