package com.fishercoder.solutions;

import com.fishercoder.common.classes.NestedInteger;

import java.util.List;

/**
 * 339. Nested List Weight Sum
 *
 * Given a nested list of integers, return the sum of all integers in the list weighted by their depth.
 * Each element is either an integer, or a list -- whose elements may also be integers or other lists.
 *
 * Example 1:
 * Input: [[1,1],2,[1,1]]
 * Output: 10
 * Explanation: Four 1's at depth 2, one 2 at depth 1.
 *
 * Example 2:
 * Input: [1,[4,[6]]]
 * Output: 27
 * Explanation: One 1 at depth 1, one 4 at depth 2, and one 6 at depth 3; 1 + 4*2 + 6*3 = 27.
 * */
public class _339 {
  public static class Solution1 {
    private int sum = 0;

    public int depthSum(List<NestedInteger> nestedList) {
      return dfs(nestedList, 1);
    }

    private int dfs(List<NestedInteger> nestedList, int depth) {
      for (NestedInteger ni : nestedList) {
        if (ni.isInteger()) {
          sum += depth * ni.getInteger();
        } else {
          dfs(ni.getList(), depth + 1);
        }
      }
      return sum;
    }
  }

  public static class Solution2 {
    public int depthSum(List<NestedInteger> nestedList) {
      return dfs(nestedList, 1);
    }

    private int dfs(List<NestedInteger> nestedList, int depth) {
      int sum = 0;
      for (NestedInteger ni : nestedList) {
        sum += ni.isInteger() ? depth * ni.getInteger() : dfs(ni.getList(), depth + 1);
      }
      return sum;
    }
  }
}

@@ -111,518 +111,8 @@
 t;%0A%0A
-/**%0A * 339. Nested List Weight Sum%0A *%0A * Given a nested list of integers, return the sum of all integers in the list weighted by their depth.%0A * Each element is either an integer, or a list -- whose elements may also be integers or other lists.%0A *%0A * Example 1:%0A * Input: %5B%5B1,1%5D,2,%5B1,1%5D%5D%0A * Output: 10%0A * Explanation: Four 1's at depth 2, one 2 at depth 1.%0A *%0A * Example 2:%0A * Input: %5B1,%5B4,%5B6%5D%5D%5D%0A * Output: 27%0A * Explanation: One 1 at depth 1, one 4 at depth 2, and one 6 at depth 3; 1 + 4*2 + 6*3 = 27.%0A * */%0A
 publ
@@ -127,16 +127,18 @@
  _339 %7B%0A
+  
   public
@@ -163,16 +163,20 @@
 tion1 %7B%0A
+    
     priv
@@ -193,16 +193,20 @@
 m = 0;%0A%0A
+    
     publ
@@ -247,32 +247,38 @@
 %3E nestedList) %7B%0A
+      
       return dfs
@@ -290,35 +290,43 @@
 edList, 1);%0A    
+ 
-%7D%0A%0A
+   %7D%0A%0A    
     private int 
@@ -376,24 +376,30 @@
 th) %7B%0A      
+   
+   
 for (NestedI
@@ -416,32 +416,40 @@
 : nestedList) %7B%0A
+        
         if (ni.i
@@ -458,24 +458,34 @@
 nteger()) %7B%0A
+          
           su
@@ -514,16 +514,24 @@
 eger();%0A
+        
         
@@ -539,16 +539,26 @@
  else %7B%0A
+          
         
@@ -601,18 +601,38 @@
     
+  
-%7D%0A
+      %7D%0A     
       
+ 
 %7D%0A
+      
     
@@ -653,15 +653,23 @@
     
+   
+ 
 %7D%0A
+  
   %7D%0A%0A
+  
   pu
@@ -698,16 +698,20 @@
 tion2 %7B%0A
+    
     publ
@@ -762,24 +762,30 @@
 st) %7B%0A      
+ 
+     
 return dfs(n
@@ -795,24 +795,28 @@
 edList, 1);%0A
+    
     %7D%0A%0A    p
@@ -810,24 +810,28 @@
      %7D%0A%0A    
+ 
+   
 private int 
@@ -875,24 +875,30 @@
 nt depth) %7B%0A
+      
       int su
@@ -906,24 +906,30 @@
  = 0;%0A      
+  
+    
 for (NestedI
@@ -958,24 +958,32 @@
 ) %7B%0A        
+      
+  
 sum += ni.is
@@ -1052,26 +1052,38 @@
 + 1);%0A      
-%7D%0A
+      %7D%0A      
       return
@@ -1092,16 +1092,22 @@
 um;%0A    
-%7D%0A
+    %7D%0A  
   %7D%0A%7D%0A

refactor 339