首页 > 代码库 > Text Justification
Text Justification
在一段时间没刷题之后,我发现脑子严重地滞涩了。这题AC花了好大力气,出现了Memory Limit Exceed,Core Dump,以及各种普通的编译、运行错误。MLE 和 CD错误是比较难检查的, 只能通过打印来定位,最后发现原来是循环变量未赋值,导致死循环!!!这种错误简直是不能原谅的。二至于其他的各种问题,则是由于脑子里面没有清晰的算法思路,以致一些case不能通过。这种问题,需要经过大量的训练,以及集中精力地编写代码,才能逐渐减少甚至避免。
当然,另一方面,总体思路上,比第一次AC清晰了许多。每一行的形成需要在下一行开头单词出现以后进行判断以及添加,这样避免了在当前行进行判断需要考虑多种情况的问题。代码如下:
public class Solution { public ArrayList<String> fullJustify(String[] words, int L) { ArrayList<String> res=new ArrayList<String>(); ArrayList<String> line=new ArrayList<String>(); int len=0; for(int i=0;i<words.length;i++) { String cw=words[i]; if(line.size()+len+cw.length()>L) { String s=""; String interval=""; int sc=0,sr=0; if(line.size()==1) { sc=L-len; sr=0; s=line.get(0); for(int j=0;j<sc;j++) interval+=" "; s+=interval; res.add(s); } else { sc=(L-len)/(line.size()-1); sr=(L-len)%(line.size()-1); s=s+line.get(0); for(int j=0;j<sc;j++) interval+=" "; int ct=sr; for(int j=1;j<line.size();j++) { String ts=interval; if(ct>0) { ts=interval+" "; ct--; } s=s+ts; s=s+line.get(j); } res.add(s); } len=cw.length(); line=new ArrayList<String>(); line.add(cw); if(i==words.length-1) { s=cw; sc=L-cw.length(); for(int j=0;j<sc;j++) s=s+" "; res.add(s); } } else { line.add(cw); len+=cw.length(); int l=0; if(i==words.length-1) { String s=line.get(0); l=s.length(); for(int j=1;j<line.size();j++) { s=s+" "; s=s+line.get(j); l=l+1+line.get(j).length(); } int rem=L-l; for(int j=0;j<rem;j++) { s=s+" "; } res.add(s); } } } return res; }}
Text Justification
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。