https://oj.leetcode.com/problems/text-justification/
这个题目没有什么算法。但是要实现还是比较麻烦,一次写对基本不可能。注意理解清楚题意,写完程序脑子里过一遍再编译可能会好一点。
主要就是每次扫面一行以内的,正确的数算上最小空格数量能放下的单词,并统计每个后面需要加的空格个数。
class Solution {
public:
int n,m;
vector<string> fullJustify(vector<string> &words, int L) {
n=words.size();
int s=0;
vector <string> res;
while(s<n){
int count=0;
int end=n;
int chCount=0;
bool contFlag=false;
for (int i=s;i<n;i++){
if (i==s){
if (count+words[i].length()>L){
end=i;
break;
}
}
else{
if (count+words[i].length()+1>L){
end=i;
break;
}
}
chCount+=words[i].length();
count+=words[i].length();
if (i>s){count+=1;}
}
int spaceNum=L-chCount;
int betNum=end-s-1;
if (betNum==0){betNum=1;}
int unitNum=spaceNum / betNum;
int redNum=spaceNum % betNum;
string cur;
if (end==n){
for (int i=s;i<end;i++){
if (i>s){
cur+=" ";
}
cur+=words[i];
}
if (L>cur.length()){
cur+=string(L-cur.length(),' ');
}
res.push_back(cur);
s=end;
continue;
}
for (int i=s;i<end;i++){
cur+=words[i];
if (i+1==end && end-s>1){continue;}
cur+=string(unitNum,' ');
if (redNum){
cur+=" ";
redNum--;
}
}
res.push_back(cur);
s=end;
}
return res;
}
};