笔试题81. LeetCode OJ (68)
来源:互联网 发布:店铺怎么加入农村淘宝 编辑:程序博客网 时间:2024/06/06 03:05
Text Justification
这个题的意思比较简单,但是情况很复杂,输入一些列单词,然后将这些单词按照规定的长度组合,参照例子大概就可以知道组合的规律,首先分析一下,然后再给出解题思路。这个题的规律如下:
(1).每两个单词之间有一个空格,一行中若有些单词无法完全排列下来就将它放在新的一行中。
(2).最后一行和他之前的所有行有些不一样,最后一行是按照一个单词一个空格来排列的;而他之前的每行,若有两个单词,则这两个单词必须分别在最左和最右端。
我提供两个测试用例来帮助大家分析容易漏掉的地方:
除了上面两种情况以外,还有的情况就是:
[""] 2 [" "] (L的长度为2,但是提供的只是一个空串,但是返回的结果却要包含两个长度,即: [" "])
解题思路:遍历单词数组,统计每个单词的长度(算上空格的占位),若是当前位置所在的区间的所有单词的长度大于题目给定的长度,那么就需要按照规律插入,就这样一直执行,最后需要判断最后一行的处理。
我的解题代码如下:
class Solution {public:vector<string> fullJustify(vector<string>& words, int maxWidth) {vector<string> ret;ret.clear();if (words.size() == 0 || maxWidth <= 0){return words;}int begin = 0; //开始位置int end = words.size(); //结束为止int num = 0; //统计每个区间单词的个数(这个区间就是需要合并的单词的区间)int sz = 0; //统计纯单词的长度int bits = 0; //统计包括每个单词后面跟上空格后的数量int offset = 0; //偏移量while (begin < end){int len = words[begin].size();if (len > maxWidth){return vector<string>(1,"");}if (bits + len >maxWidth){ //占位超过,需要添加string tmp = "";if (num == 1){//单独一个的时候需要补齐int len = words[offset + num - 1].size();tmp = words[offset + num - 1];tmp += string(maxWidth - len, ' ');}else{int every = (maxWidth - sz) / (num - 1);int left = maxWidth - sz - (num - 1)*every;int pos = 0;for (int i = 0; i < num-1; ++i){tmp += words[offset + i];if (pos < left){string tb(every + 1, ' ');tmp += tb;}else{string tb(every, ' ');tmp += tb;}++pos;}if (num > 0){ //num不为0tmp += words[offset + num - 1];}else{ ////num为0的特殊情况int len = words[offset + num].size();tmp += words[offset + num];tmp += string(maxWidth - len, ' ');}}ret.push_back(tmp);if (num > 0) offset += num;elseoffset += 1; //num为0的特殊情况//统计完一行后需要将以下变量置0num = 0; sz = 0;bits = 0;}sz += len; //不算空格bits += len + 1; //算上空格++num;++begin;}//最后一行没有处理,最后一行的格式有别于之前的if (offset != end){string tmp = "";if (num == 1){int len = words[offset + num - 1].size();tmp = words[offset + num - 1];tmp += string(maxWidth - len, ' ');}else{int pos = 0;for (int i = 0; i < num - 1; ++i){tmp += words[offset + i];tmp += ' ';++pos;}tmp += words[offset + num - 1];tmp += string(maxWidth - bits + 1, ' '); //空格补齐}ret.push_back(tmp);}return ret;}};程序结果如下:
0 0
- 笔试题81. LeetCode OJ (68)
- 笔试题14. LeetCode OJ (1)
- 笔试题15. LeetCode OJ (2)
- 笔试题16. LeetCode OJ (3)
- 笔试题17. LeetCode OJ (4)
- 笔试题18. LeetCode OJ (7)
- 笔试题19. LeetCode OJ (5)
- 笔试题20. LeetCode OJ (6)
- 笔试题21 . LeetCode OJ (8)
- 笔试题22. LeetCode OJ (9)
- 笔试题23. LeetCode OJ (10)
- 笔试题24. LeetCode OJ (11)
- 笔试题25. LeetCode OJ (12)
- 笔试题26. LeetCode OJ (13)
- 笔试题27. LeetCode OJ (14)
- 笔试题28. LeetCode OJ (15)
- 笔试题29. LeetCode OJ (16)
- 笔试题30. LeetCode OJ (17)
- SQL Server性能调优系列
- HttpUtils请求XML加XListView刷新加载
- 计算机网络课程tcp复习笔记
- QLabel出现一会然后消失,起到提示作用
- Android Studio真机测试失败-----''No target device found"
- 笔试题81. LeetCode OJ (68)
- php 后期静态绑定 static 关键字的另一种用法
- [置顶] Android之Notification的多种用法
- 机器学习系列:(九)从感知器到支持向量机
- 基于SQL求集合的交、并、补
- suid 实验
- 关于ios项目绕过证书访问https
- ListView实现多布局(上)
- gradle解析mavenLocal()仓库地址流程