class Solution {
public:
string space(int x)
{
string res;
while(x--)res+=' ';
return res;
}
vector<string> fullJustify(vector<string>& words, int maxWidth) {
vector<string>ans;
for(int i=0;i<words.size();)
{
int j=i+1,s=words[i].size(),rs=words[i].size();
while(j<words.size()&&s+1+words[j].size()<=maxWidth)
{
s+=words[j].size()+1;
rs+=words[j].size();
j++;
}
rs=maxWidth-rs;//总共需要空格数没有算上单词间隔;
string line=words[i];
if(j==words.size())
{
for(int k=i+1;k<j;k++)line+=' '+words[k];
line+=space(maxWidth-line.size());
}
else if(j-i==1)//一行只有一个单词
{
line+=space(maxWidth-line.size());
}
else
{
int base=rs/(j-i-1);//空格数/多少个区间间隔
int rem=rs%(j-i-1);//平均分割剩余多少个空格;
i++;//因为i已经在line了,所以++;
for(int k=0;i<j;i++,k++)
{
line+=space(base+(k<rem))+words[i];//看当前的剩余是否足够,足够就分配给当前的间隔,保证有多余时左边多.
}
}
i=j;//当前j指向的位置是Line后一个位置;
ans.push_back(line);
}
return ans;
}
};