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 Lcharacters.

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.

Corner Cases:

  • A line other than the last line might contain only one word. What should you do in this case?
    In this case, that line should be left-justified.

将由单词组成的数组,按每行最多L个字符进行对齐调整。

解法:先找到某一行能放下的单词,单词的字母数之和加上单词之间的空格要小于等于L,然后需要补充空格的话在填进去空格。假设有n个单词,那么就会有n-1个间隔,每个间隔的空格数应该是:(L-此行所有单词的长度和)/(n-1)。只用一个单词的话,排好单词在补上空格即可。

参考:喜刷刷

Java:

public List<String> fullJustify(String[] words, int L) {
List<String> res = new ArrayList<>();
int n = words.length;
char[] spaces = new char[L];
Arrays.fill(spaces, ' ');
for(int i=0; i<n; i++) {
int len = words[i].length();
int j = i;
while(i<n-1 && len+1+words[i+1].length()<=L) {
len += 1+words[++i].length();
}
StringBuilder sb = new StringBuilder(words[j]);
if(j == i || i==n-1) {
while(i==n-1 && j < i) {
sb.append(" "+words[++j]);
}
sb.append(spaces, 0, L-sb.length());
} else {
int avg = (L-len)/(i-j);
int rem = (L-len)%(i-j);
while(j < i) {
sb.append(spaces, 0, avg+1);
if(rem-- > 0) sb.append(" ");
sb.append(words[++j]);
}
}
res.add(sb.toString());
}
return res;
}  

Python:

class Solution(object):
def fullJustify(self, words, maxWidth):
"""
:type words: List[str]
:type maxWidth: int
:rtype: List[str]
"""
def addSpaces(i, spaceCnt, maxWidth, is_last):
if i < spaceCnt:
# For the last line of text, it should be left justified,
# and no extra space is inserted between words.
return 1 if is_last else (maxWidth // spaceCnt) + int(i < maxWidth % spaceCnt)
return 0 def connect(words, maxWidth, begin, end, length, is_last):
s = [] # The extra space O(k) is spent here.
n = end - begin
for i in xrange(n):
s += words[begin + i],
s += ' ' * addSpaces(i, n - 1, maxWidth - length, is_last),
# For only one word in a line.
line = "".join(s)
if len(line) < maxWidth:
line += ' ' * (maxWidth - len(line))
return line res = []
begin, length = 0, 0
for i in xrange(len(words)):
if length + len(words[i]) + (i - begin) > maxWidth:
res += connect(words, maxWidth, begin, i, length, False),
begin, length = i, 0
length += len(words[i]) # Last line.
res += connect(words, maxWidth, begin, len(words), length, True),
return res  

C++:

class Solution {
public:
vector<string> fullJustify(vector<string>& words, int maxWidth) {
int cnt = 0, left = 0;
vector<string> result;
for(int i =0; i< words.size(); i++)
{
cnt += words[i].size();
if(cnt+i-left > maxWidth || i+1==words.size())
{
if(cnt+i-left > maxWidth) cnt -= words[i--].size();
string str = words[left];
for(int j = left+1; j<= i; j++)
{
int m = maxWidth-cnt, n = i-left;
if(i+1==words.size()) str += " ";
else str.append(m/n + (j-left-1<m % n), ' ');
str += words[j];
}
str.append(maxWidth-str.size(), ' ');
result.push_back(str);
left = i+1, cnt = 0;
}
}
return result;
}
};

  

All LeetCode Questions List 题目汇总

最新文章

  1. 内网穿透神器ngrok
  2. ios 快速审核
  3. 博文Contents&lt;201--到000—&gt;
  4. jfreechart 整合sturts2牛刀小试
  5. Memcached缓存在.Net 中的使用(memcacheddotnet)
  6. iOS开发数据库SQLite的使用
  7. 【同行说技术】Python程序员小白变大神必读资料汇总( 三)
  8. js object 对象 属性和方法的使用
  9. UML状态图(转载)
  10. extjs表格下的分页条——Ext.grid.Panel 的 pagingtoolbar
  11. 5. Android框架和工具之 ZXing(二维码)
  12. 51nod 1257 背包问题 V3
  13. SQL Server 2008备份数据库失败,拒绝访问的原因
  14. jconsole 连接 eclipse启动项
  15. 仿async/await(一)and Gulp:新一代前端构建利器
  16. POJ1556 The Doors 叉积+最短路
  17. pycharm社区版无database 解决方法
  18. 开涛spring3(6.4) - AOP 之 6.4 基于@AspectJ的AOP
  19. Vue 单文件元件 — vTabs
  20. 【算法】单源最短路——Dijkstra

热门文章

  1. Hoax or what UVA - 11136(multiset的应用)
  2. 树莓派安装C#运行环境
  3. AST11103 Problem Solving
  4. MySQL 分库分表 dble简单使用
  5. cjss 像编写css 一样开发web应用
  6. chsh
  7. C# 读取Excel 单元格是日期格式
  8. 81: luogu3370 hash
  9. Luogu5206 【WC2019】数树 【容斥,生成函数】
  10. Tkinter 之文件管理器