Clear with edge case. Such as L == 0, what to return.
1 class Solution { 2 public: 3 vector<string> fullJustify(vector<string> &words, int L) { 4 vector<string> result; 5 if (L == 0) { 6 result.push_back(""); 7 return result; 8 } 9 int len = words.size(), start = 0, wordNumber = 1, length = words[0].size(), spaceNumber = 0, extraSpace = 0; 10 string line; 11 for (int i = 1; i < len; i++) { 12 if (length + wordNumber + words[i].size() <= L) { 13 length += words[i].size(); 14 wordNumber++; 15 } else { 16 if (wordNumber == 1) { 17 spaceNumber = L - length; 18 extraSpace = 0; 19 } else { 20 spaceNumber = (L - length)/(wordNumber - 1); 21 extraSpace = (L - length)%(wordNumber - 1); 22 } 23 for (int j = start; j < i; j++) { 24 if (j == i-1 && start != i-1) { 25 line += words[i-1]; 26 break; 27 } 28 line += words[j]; 29 for (int k = 0; k < spaceNumber; k++) line += ' '; 30 if (extraSpace-- > 0) line += ' '; 31 } 32 result.push_back(line); 33 line = ""; 34 length = words[i].size(); 35 start = i; 36 wordNumber = 1; 37 } 38 } 39 for (int i = start; i < len; i++) { 40 if (i == len-1) line += words[len-1]; 41 else line += words[i] + ' '; 42 } 43 for (int i = 0; i < L - length - wordNumber + 1; i++) line += ' '; 44 result.push_back(line); 45 return result; 46 } 47 };