import java.util.ArrayList;
import java.util.List;
class Solution {
public List<String> fullJustify(String[] words, int maxWidth) {
List<String> result = new ArrayList<>(); // 创建一个列表用于存储结果
int index = 0; // 初始化索引为0,用于遍历单词数组
while (index < words.length) { // 当索引小于单词数组长度时,继续循环
int count = words[index].length(); // 计算当前单词的长度
int last = index + 1; // 初始化last为当前索引+1,用于确定当前行可以容纳的单词范围
while (last < words.length) { // 当last小于单词数组长度时,继续循环
if (words[last].length() + count + 1 > maxWidth) break; // 如果下一个单词加上当前单词长度和空格超过最大宽度,跳出循环
count += words[last].length() + 1; // 累加单词长度和空格
last++; // 更新last的值
}
StringBuilder builder = new StringBuilder(); // 创建一个StringBuilder用于构建当前行的字符串
int diff = last - index - 1; // 计算当前行可以容纳的单词数量
if (last == words.length || diff == 0) { // 如果是最后一行或者只有一个单词
for (int i = index; i < last; i++) { // 遍历当前行的单词
builder.append(words[i] + " "); // 将单词添加到builder中,并在单词之间添加空格
}
builder.deleteCharAt(builder.length() - 1); // 删除最后一个多余的空格
while (builder.length() < maxWidth) { // 如果当前行长度小于最大宽度,添加空格
builder.append(" ");
}
} else { // 如果不是最后一行且有多个单词
int spaces = (maxWidth - count) / diff; // 计算每个单词之间的平均空格数
int r = (maxWidth - count) % diff; // 计算需要额外添加一个空格的位置数
for (int i = index; i < last - 1; i++) { // 遍历当前行的单词,除了最后一个
builder.append(words[i]); // 添加单词
builder.append(" "); // 添加空格
for (int j = 0; j < spaces + (i - index < r ? 1 : 0); j++) { // 根据平均空格数和额外空格数添加空格
builder.append(" ");
}
}
builder.append(words[last - 1]); // 添加最后一个单词
}
result.add(builder.toString()); // 将构建好的字符串添加到结果列表中
index = last; // 更新索引为last,准备处理下一行
}
return result; // 返回结果列表
}
}