LeetCode-Text Justification-文字调整-情况比较复杂
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; } };