@@ -80,98 +80,102 @@ This function return the sum result at C(row, column).
8080 */
8181public class _631 {
8282
83- /**Credit: https://leetcode.com/articles/design-excel-sum-formula/#approach-1-using-topological-sortaccepted*/
84- public static class Excel {
85-
86- Formula [][] formulas ;
83+ public static class Solution1 {
84+ /**
85+ * Credit: https://leetcode.com/articles/design-excel-sum-formula/#approach-1-using-topological-sortaccepted
86+ */
87+ public static class Excel {
88+
89+ Formula [][] formulas ;
90+
91+ class Formula {
92+ Formula (HashMap <String , Integer > c , int v ) {
93+ val = v ;
94+ cells = c ;
95+ }
8796
88- class Formula {
89- Formula (HashMap <String , Integer > c , int v ) {
90- val = v ;
91- cells = c ;
97+ HashMap <String , Integer > cells ;
98+ int val ;
9299 }
93100
94- HashMap <String , Integer > cells ;
95- int val ;
96- }
101+ Stack <int []> stack = new Stack <>();
97102
98- Stack <int []> stack = new Stack <>();
99-
100- public Excel (int H , char W ) {
101- formulas = new Formula [H ][(W - 'A' ) + 1 ];
102- }
103+ public Excel (int H , char W ) {
104+ formulas = new Formula [H ][(W - 'A' ) + 1 ];
105+ }
103106
104- public int get (int r , char c ) {
105- if (formulas [r - 1 ][c - 'A' ] == null ) {
106- return 0 ;
107+ public int get (int r , char c ) {
108+ if (formulas [r - 1 ][c - 'A' ] == null ) {
109+ return 0 ;
110+ }
111+ return formulas [r - 1 ][c - 'A' ].val ;
107112 }
108- return formulas [r - 1 ][c - 'A' ].val ;
109- }
110113
111- public void set (int r , char c , int v ) {
112- formulas [r - 1 ][c - 'A' ] = new Formula (new HashMap <String , Integer >(), v );
113- topologicalSort (r - 1 , c - 'A' );
114- execute_stack ();
115- }
114+ public void set (int r , char c , int v ) {
115+ formulas [r - 1 ][c - 'A' ] = new Formula (new HashMap <String , Integer >(), v );
116+ topologicalSort (r - 1 , c - 'A' );
117+ execute_stack ();
118+ }
116119
117- public int sum (int r , char c , String [] strs ) {
118- HashMap <String , Integer > cells = convert (strs );
119- int summ = calculate_sum (r - 1 , c - 'A' , cells );
120- set (r , c , summ );
121- formulas [r - 1 ][c - 'A' ] = new Formula (cells , summ );
122- return summ ;
123- }
120+ public int sum (int r , char c , String [] strs ) {
121+ HashMap <String , Integer > cells = convert (strs );
122+ int summ = calculate_sum (r - 1 , c - 'A' , cells );
123+ set (r , c , summ );
124+ formulas [r - 1 ][c - 'A' ] = new Formula (cells , summ );
125+ return summ ;
126+ }
124127
125- public void topologicalSort (int r , int c ) {
126- for (int i = 0 ; i < formulas .length ; i ++) {
127- for (int j = 0 ; j < formulas [0 ].length ; j ++) {
128- if (formulas [i ][j ] != null && formulas [i ][j ].cells .containsKey ("" + (char ) ('A' + c ) + (r + 1 ))) {
129- topologicalSort (i , j );
128+ public void topologicalSort (int r , int c ) {
129+ for (int i = 0 ; i < formulas .length ; i ++) {
130+ for (int j = 0 ; j < formulas [0 ].length ; j ++) {
131+ if (formulas [i ][j ] != null && formulas [i ][j ].cells .containsKey ("" + (char ) ('A' + c ) + (r + 1 ))) {
132+ topologicalSort (i , j );
133+ }
130134 }
131135 }
136+ stack .push (new int []{r , c });
132137 }
133- stack .push (new int []{r , c });
134- }
135138
136- public void execute_stack () {
137- while (!stack .isEmpty ()) {
138- int [] top = stack .pop ();
139- if (formulas [top [0 ]][top [1 ]].cells .size () > 0 ) {
140- calculate_sum (top [0 ], top [1 ], formulas [top [0 ]][top [1 ]].cells );
139+ public void execute_stack () {
140+ while (!stack .isEmpty ()) {
141+ int [] top = stack .pop ();
142+ if (formulas [top [0 ]][top [1 ]].cells .size () > 0 ) {
143+ calculate_sum (top [0 ], top [1 ], formulas [top [0 ]][top [1 ]].cells );
144+ }
141145 }
142146 }
143- }
144147
145- public HashMap <String , Integer > convert (String [] strs ) {
146- HashMap <String , Integer > res = new HashMap <>();
147- for (String st : strs ) {
148- if (st .indexOf (":" ) < 0 ) {
149- res .put (st , res .getOrDefault (st , 0 ) + 1 );
150- } else {
151- String [] cells = st .split (":" );
152- int si = Integer .parseInt (cells [0 ].substring (1 ));
153- int ei = Integer .parseInt (cells [1 ].substring (1 ));
154- char sj = cells [0 ].charAt (0 );
155- char ej = cells [1 ].charAt (0 );
156- for (int i = si ; i <= ei ; i ++) {
157- for (char j = sj ; j <= ej ; j ++) {
158- res .put ("" + j + i , res .getOrDefault ("" + j + i , 0 ) + 1 );
148+ public HashMap <String , Integer > convert (String [] strs ) {
149+ HashMap <String , Integer > res = new HashMap <>();
150+ for (String st : strs ) {
151+ if (st .indexOf (":" ) < 0 ) {
152+ res .put (st , res .getOrDefault (st , 0 ) + 1 );
153+ } else {
154+ String [] cells = st .split (":" );
155+ int si = Integer .parseInt (cells [0 ].substring (1 ));
156+ int ei = Integer .parseInt (cells [1 ].substring (1 ));
157+ char sj = cells [0 ].charAt (0 );
158+ char ej = cells [1 ].charAt (0 );
159+ for (int i = si ; i <= ei ; i ++) {
160+ for (char j = sj ; j <= ej ; j ++) {
161+ res .put ("" + j + i , res .getOrDefault ("" + j + i , 0 ) + 1 );
162+ }
159163 }
160164 }
161165 }
166+ return res ;
162167 }
163- return res ;
164- }
165168
166- public int calculate_sum (int r , int c , HashMap <String , Integer > cells ) {
167- int sum = 0 ;
168- for (String s : cells .keySet ()) {
169- int x = Integer .parseInt (s .substring (1 )) - 1 ;
170- int y = s .charAt (0 ) - 'A' ;
171- sum += (formulas [x ][y ] != null ? formulas [x ][y ].val : 0 ) * cells .get (s );
169+ public int calculate_sum (int r , int c , HashMap <String , Integer > cells ) {
170+ int sum = 0 ;
171+ for (String s : cells .keySet ()) {
172+ int x = Integer .parseInt (s .substring (1 )) - 1 ;
173+ int y = s .charAt (0 ) - 'A' ;
174+ sum += (formulas [x ][y ] != null ? formulas [x ][y ].val : 0 ) * cells .get (s );
175+ }
176+ formulas [r ][c ] = new Formula (cells , sum );
177+ return sum ;
172178 }
173- formulas [r ][c ] = new Formula (cells , sum );
174- return sum ;
175179 }
176180 }
177181
@@ -183,9 +187,4 @@ public int calculate_sum(int r, int c, HashMap<String, Integer> cells) {
183187 * int param_3 = obj.sum(r,c,strs);
184188 */
185189
186- public static void main (String ... args ) {
187- System .out .println ('A' - 64 );
188- System .out .println ((int ) 'C' );
189- System .out .println ('Z' - 64 );
190- }
191190}
0 commit comments