1 /**
2 * @param {string[]} words
3 * @param {number} maxWidth
4 * @return {string[]}
5 */
6 var fullJustify = function (words, maxWidth) {
7 const wLen = words.length;
8 const ans = [];
9 let arr = [];
10 let surplus = maxWidth;
11 const getString = (array, number) => {
12 const aLen = array.length;
13 if (aLen === 1) {
14 return array[0] + Array(number).fill(' ').join('');
15 }
16 const yu = number % (aLen - 1);
17 const num = (number - yu) / (aLen - 1);
18 for (let i = 0; i < yu; i++) {
19 array[i] = array[i] + ' ';
20 }
21 return array.join(Array(num + 1).fill(' ').join(''));
22 };
23 for (let i = 0; i < wLen; i++) {
24 if (surplus - words[i].length > 0) {
25 arr.push(words[i]);
26 surplus = surplus - words[i].length - 1;
27 } else if (surplus - words[i].length === 0) {
28 arr.push(words[i]);
29 ans.push(arr.join(' '));
30 surplus = maxWidth;
31 arr = [];
32 } else {
33 ans.push(getString(arr, surplus + 1));
34 arr = [words[i]];
35 surplus = maxWidth - words[i].length - 1;
36 }
37 }
38 if (arr.length > 0) {
39 ans.push(arr.join(' ') + Array(surplus + 1).fill(' ').join(''));
40 }
41 return ans;
42 };