From 1cc26f5c0f9140a2b91ff99b8a513f73b5e5b322 Mon Sep 17 00:00:00 2001
From: Ralic Lo <raliclo@gmail.com>
Date: Sat, 25 Nov 2017 02:25:40 -0800
Subject: [PATCH] Solution in C# and another reference code in python. I hope
 this helps .
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

public class Solution {
    public IList<string> FullJustify(string[] words, int maxWidth) {
        IList<string> res = new List<string>();
        int i = 0;
        int chLength = 0; //字符所占的长度
        int wordLength = 0; //单词个数

        int space = 0;

        while(i < words.Length)
        {
            string word = words[i];
            if(wordLength + chLength + word.Length <= maxWidth)
            {
                wordLength++;
                chLength += word.Length;
                i++;
                continue;
            }

            space = maxWidth - chLength;
            if(wordLength == 0) return res;
            if(wordLength == 1)
            {
                res.Add(words[i - 1].PadRight(maxWidth, ' '));
            }
            else
            {
                int wordSpace = space / (wordLength - 1);
                int extraSpace = space % (wordLength - 1);
                int start = i - wordLength;
                string cur = string.Empty;
                for(int j = start; j < start + extraSpace; j++)
                {
                    cur += words[j];
                    cur += new string(' ', wordSpace + 1);
                }
                for(int j = start + extraSpace; j < i - 1; j++)
                {
                    cur += words[j];
                    cur += new string(' ', wordSpace);
                }
                cur += words[i - 1];
                res.Add(cur);
            }
            chLength = 0;
            wordLength = 0;
        }
        //加上最后一行
        if(wordLength == 0) return res;
        space = maxWidth - chLength;
        if(wordLength == 1)
        {
            res.Add(words[i - 1].PadRight(maxWidth, ' '));
        }
        else
        {
            int start = i - wordLength;
            string cur = string.Empty;

            for(int j = start; j < i - 1; j++)
            {
                cur += words[j];
                cur += ' ';
            }
            cur += words[i - 1];

            res.Add(cur.PadRight(maxWidth, ' '));
        }
        return res;
    }
}

class Solution:
    def fullJustify(self, words, maxWidth):
        """
        :type words: List[str]
        :type maxWidth: int
        :rtype: List[str]
        """
        res, cur, num_of_letters = [], [], 0
        for w in words:
            if num_of_letters + len(w) + len(cur) > maxWidth:
                for i in range(maxWidth - num_of_letters):
                    cur[i%(len(cur)-1 or 1)] += ' '
                res.append(''.join(cur))
                cur, num_of_letters = [], 0
            cur += [w]
            num_of_letters += len(w)
        return res + [' '.join(cur).ljust(maxWidth)]
---
 Algorithms/TextJustification.cs | Bin 3564 -> 3934 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/Algorithms/TextJustification.cs b/Algorithms/TextJustification.cs
index 8862dae453c99ca90a19467accec647234139e2a..551e33306984e290848d01e6806b92abc68d8cb8 100755
GIT binary patch
literal 3934
zcmc&$&u<$=6uw8w|L_zEVaM(|snh~)0*XpowF;<eKoyE|nCy<dQ`S4y&TL()s?-A)
zDuTFFNQgtZ^ngHctl-dprfJKGe}V7K?0SFLg&ZoeaqRKT`|-W^zW2s||M`3{paY#}
zp`;<j)=tfEFi51dp^jt_>d9c5>ElFB%)rWf_S~J^ST$0iuu7)`T3>_yUT$NZL7#Qz
zx!?R)ST=c(r;(WV>4r#ik<DrQLZ8lWZNEn!3@>aCx6aeePaqF7n{WMDU)#hB);H;z
zx+_x>cx9QGlOEAbXOY29M1m5Tj%`f)eH!U(A}rZh5=ToW4`Y18mK0beDwPxqL-L*o
zZ8E2Q3S*IBEi-RS85-pYPCAJkS!X{}<JfkoNSurU2INqc=)TZ7nONsZL{kxdNpsYr
z0H^?&#+j7SoWvBR0E|l>kurTR4m=Z)&dZPt>r;qep}c?{&`l8mx6K3@c#($Q#osJO
zUQ&s#hO1-rS)+APlmYPPmAdI;X=f6aeU^*ZjwMCP*i0SgRwD06BdUU2VKvppD9|jR
z>m!%`G@l&Hj4M^3)tm`efJjrSEo|LYkt}UAJocRlIhk67lxS-R+FVpul$lBr0vG|8
z;}l3HI+LXv6x)k7^jr;>LcR*pJFCK24-IgcH+@pzj;|;jIj@WQJ5r>&UJC+kRBB|#
zd1*wl(kIwAnI^K&X?GbO(&5Huu`(Nd+VJlp<#i#*OFiOu2FIU`E)F)1*wX%xwl6OE
zyCrR&`HcAHV2E4>@ZAhc0vz%Jk3+!=1cZlClqUri;*xq8<w+9^jPQYj#Ebg>r`pOP
zUEx;bxY^4XQ$?f}4dO^)Ij<pq+h_Xw&Rz;COcdG-vZ&DvQ!7hBwNMyo7NVE^=4IYo
zgvnU;ib|vKT>XMA$$|nCZg<#BtpEVc{MMKnj5na$JW2{;aF>G05V9zpbN>-LxL(^}
zB16N`zR9O@5Et{L$Pzx@`ZM71oEw#n>0oZGoLp*t4KC{>ks;p)Cb%Y%N);|d_L8yA
zl#M4Q_}r?*;2;$f>3W)~!}YcM>ub~e7<Hi#xiq+wlAKL$U3{N##%wCiukT}s?C=~(
z#~;#FOxqjoPMUZ8-r<pN3N&GAF&XdOR*{Xnr4_c+G?9VJyBLBqs$1@Kft7{%VM_`^
zTdln?-uHJ0AJJfN`s??vetG)x>xZW&PhS1-)nAXFpZ@W*X@-f=QaXA3`nQu8&whUS
z`1eY-TCsDVuqJ>?Viv1Jb`<US$OCV`TL}~y^uZAMMEM@t^*V>@s1}=xdDN+4?ct^?
zVE3Fx;e>W}s~lGj*+9!FZ&e0+y_P#Zu3UIjg^v}I3i_<U7pecO-nsWwn#-2jgQjHj
zTbbXIE_7}Ire#Jo(z1(^bSd*g5=8nh;q6*c81elk4Bmp3U@wYX^39<FlI^1am-j6m
zES(ZypRez3*CnB8qZOx2jBE<5@W~Y8+8ppN1Mu9ZV?cEV07tzg7%D%k>V8%<b>BIw
zuCXGsaLIvI^l0Ug9TlVv@!JRhUHb=D_=;a4i>s=`!0tFvIJku64z$=;uZ9=<y<V#(
z>}*Ajc$=N~%8t3y?iiNfr;y@_;&FCRt9~uPz168~RgO(91=2>3s2oN9mq1qWVMP#)
zta(DOs9DK-NVn}i;8e6aeK9MVLy-k58ln94kzK=vS^enAi)W8s{`m0pyKi4Sd-(dN
zZ>lyqbCaKKZY-IrkAW7|$~15gXKVjjVrl_4`@ZGGT`6a2ynk!DDqWoPC8qk8dm}kp
rh}cAfCo8+FkU%@N2viGv$<j*3HNlrjhy6E?+DfI($EEoXIC%X7O0pV^

literal 3564
zcmd6q+iw$B5XR@(QvZjQUm7ZK014UxY87!)P+CxFRiUU4j&Dh8Z!CKuu~7c?mhU&?
z$?n=XsBdVs>vNeimv6o^=lH*W_if(_du!+R-WE2nk$R8xo?4}6ZcFu$nQCUFk%1(K
zYW2J|)687!&h5k{W|H5R)W|ONy<>k%>r$;V8|xid-`nR_N~*AqzWg3Ys*=TXX$tFU
zWu=)~?wPMo58rC8lrMc-*=<R^QmfQhUs_h`-?Ilke&6n@{k=whR4fnFex#B6>c6pH
z^zFDG-`UsybmSv1KJ$GkOg{+gQf*@AyU+t7h0q-9d*P@Km4%QQ`fuUcDsAGp7k1=G
zja_!8^_8T^2v}z}3+Z^T9G<S{LTV)G7@NwQ(pQ{n412JE*-F;%=twWJcp2j(wVIxt
zd2cK`)AgD?_jK$Y5hMODWN9KjmEBUW&9RXrdTV?VrzU3a6eFBkYCWx~Yn;13|7d*W
zqwuha9Fc)vA-fC3g%u*|i~Yg>K;f~*z%8&L8kkvY4_rXF^z}^}F&Fm1DKZ+Cw^8m%
z?;FX0N9;B*C9beGawNai2=9e_3Z9T5cKK3I?v$lsZu-4#je79^a+*14Vju12UK>8=
z?TP%V<SY1scN3j<zK|>wI|x_KhZE%zrUt)*eX%!!d*S_DkrMgYx?X|eq3@GqI~8Q6
zS(ur7sEsMrE4WZIe&`66`m%HI>w{kEB-v^Du{%bXl3tAD!(2T$wiHLvOH5%qrKriV
zGcII}9aFgHco$Jl<ZECu(^{Cj$&g?x5vA7M_Ue7NJG(F3POWX~zJN-NR#c{}E5v;!
z>zjKra$Lu_z0Zj=Dgwyw+6QO{J9g4i2rOhPFxj1pFUJ?PjV$5e?RCYe8Os@ZY+d_Z
zI|ut+uLRvz8}D<xtuIGGD%*)y_S<+g&(@yS{I&Mz$WQZo_VBtYZtuw76hS54FXT_1
zx#nq*h-D6=W^*@aYCFEJyM^@BvD4#;JVZNVkM%Lul^>iKi7KOQt`K{B#Z4%%zPpxB
zJevMC+rP>ZQIfak@*&Q&%xC&O5lV4-l`b7T%6(s5vyciKb4MOGxWbb>ad-1;;QM4?
zoJFB8D&K|r+=|Fi)Fv_xpO+h%ecF<GdM(w?Rm6Vae&x9h0-O_6zU{j3xt%;yPU9pF
z??9!mG2*3GMeU_U<w-PqYX9jc%J#0$^DioDXu_A^PR9K6I;)3nX?s3vX`I8!+M6rP
z=53YyZRZKxzW!%l_;kcoPC7Wp4S%H`44>KK8|Hcje>h9HCvbBodvNTfMuL0X<TrI3
zXvM^tM=d{<71sRW8m4L^Uy2(uX{pas?*7~BI`&c0bNSD|3ar7d;2)KTe=AeXrgwK$
z-G0#cNBc(WqLy&$YOW`C*bv$dbr*$El|At<CmT5Zq}4C9j`&~c7YY8mtZc6(cdYta
z^EqyLXn@b$?k>e|&VP{Lj*4fr`KQEA21kCQ>KtlKoFkwUm1U?Zbg8IEn#nl#yr#ak
ZXZBjHTaIZ)o4-v2t{jgmyAmoL`vfU9Cl&wz