# Hard-题目52：68. Text Justification

Given an array of words and a length L, format the text such that each line has exactly L characters and is fully (left and right) justified.
You should pack your words in a greedy approach; that is, pack as many words as you can in each line. Pad extra spaces ’ ’ when necessary so that each line has exactly L characters.
Extra spaces between words should be distributed as evenly as possible. If the number of spaces on a line do not divide evenly between words, the empty slots on the left will be assigned more spaces than the slots on the right.
For the last line of text, it should be left justified and no extra space is inserted between words.
For example,
words: [“This”, “is”, “an”, “example”, “of”, “text”, “justification.”]
L: 16.
Return the formatted lines as:
[
“This is an”,
“example of text”,
“justification. ”
]
Note: Each word is guaranteed not to exceed L in length.

1、每一行的字符串长度不能超过一个固定长度maxWidth
2、每两个单词之间必须有一个空格，如果一行之间的单词之间空格不能细分，那么必须左边的空格多，右边的少。并且，空格多的地方只比右边少的多一个
3、最后一行不适用2的空格方式，正常的每个单词空一格就好，最后留白就好

1. 比如这行有6个空格，4个间隔，那么左1，左2的空格长度为2。这个自己是取模然后作为remain传递，这样知道补几次extra space。
2. 最后一行如果有两个以上单词，则间隔为1，在末尾补空格。

public class Solution {
public List<String> fullJustify(String[] words, int maxWidth) {
List<String> res = new ArrayList<String>();
if(words == null || words.length==0){
}

int i = 0;

while(true){
int c1 = maxWidth; int wordLen = 0; int start = i;

while(i<=words.length-1 && c1>=words[i].length()){
wordLen += words[i].length();
c1=c1-words[i++].length(); c1--;
}

int end = i-1;

if(i!=words.length){ // c1 < next word length
if(end==start){
placeRes(res, words, start, end, 0, maxWidth - wordLen); continue;
}
int space = (maxWidth - wordLen)/(end - start);
placeRes(res, words, start, end, (maxWidth - wordLen)%(end - start), space);
}else{ // last line
if(end==start){
// one word
placeRes(res, words, start, end, 0, maxWidth - wordLen);

}else{
// "shall be.   "
StringBuilder sb = new StringBuilder(maxWidth);
for(; start<end; start++){
sb.append(words[start]); sb.append(' ');
}
sb.append(words[start]);
while(sb.length()!=maxWidth) sb.append(' ');
}
return res;
}
}
}

void placeRes(List<String> res, String[] words, int start, int end, int remain, int spaceLen){
StringBuilder sb = new StringBuilder(); sb.append(words[start]);
if(end==start){
while(spaceLen>0){
sb.append(' '); spaceLen--;
}
}

for(int i=start+1; i<=end; i++){
for(int j=0; j<spaceLen; j++) sb.append(' ');
if(remain-->0) sb.append(' ');
sb.append(words[i]);
}
}
}

1ms,33.42%,1ms,66.58%

• 本文已收录于以下专栏：

## [leetcode-68]Text Justification(java)

• zdavb
• 2015年08月04日 11:20
• 457

## [leetcode] 68. Text Justification

Given an array of words and a length L, format the text such that each line has exactly L characters...
• TstsUgeg
• 2016年04月21日 16:11
• 474

## LeetCode68——Text Justification

LeetCode68——Text Justification 也是相当恶心的一道题，倒不是有多难，还是不知道他的边界条件是怎么样的，所以也是经过多次的提交取改进代码，最后通过。 就不细说了，代码： c...
• zhangxiao93
• 2015年11月02日 10:34
• 313

## LeetCode 68. Text Justification（文本对齐）

• jmspan
• 2016年05月22日 00:05
• 256

## LeetCode||68. Text Justification

Given an array of words and a length L, format the text such that each line has exactly L characters...
• Lingfu74
• 2017年12月04日 15:18
• 22

## LeetCode | 68. Text Justification

Given an array of words and a length L, format the text such that each line has exactly L characters...
• pku_Coder
• 2017年07月31日 00:21
• 152

## 68. Text Justification

• wusecaiyun
• 2015年08月02日 18:34
• 452

## leetcode 68. Text Justification

Given an array of words and a length L, format the text such that each line has exactly L characters...
• tinkle181129
• 2016年06月29日 17:16
• 124

## Leetcode 68. Text Justification

68. Text Justification Total Accepted: 32775 Total Submissions: 202667 Difficulty: Hard Given...
• fantasiasango
• 2016年05月02日 07:10
• 268

## LeetCode 68. Text Justification

• u014674776
• 2014年07月12日 05:53
• 602

举报原因： 您举报文章：Hard-题目52：68. Text Justification 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)