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 };

 

posted on 2015-03-24 17:00  keepshuatishuati  阅读(152)  评论(0编辑  收藏  举报