LeetCode68文字左右對齊

2021-10-24 21:48:41 字數 1657 閱讀 7874

1.先取出一行能夠容納的單詞,將這些單詞根據規則填入一行

2.計算出額外空格的數量 spacecount,額外空格就是正常書寫用不到的空格

2.1除去所有單詞的長度

3.平均分布:簡單來說就是商和餘數的計算

4.特殊處理

4.1一行只有乙個單詞,單詞左對齊,右側填滿空格

4.2最後一行,所有單詞左對齊,中間只有乙個空格,最後乙個單詞右側填滿空格

需要填充的空格數量就是詞尾空格 + 額外空格,當然最後乙個單詞的詞尾空格不算。具體計算請看下面**展示。

//這裡有空格,所以要 + 1

cur_row_len += words[i]

.length()

+1; i++;}

stringbuilder tmp =

newstringbuilder()

;// 考慮最後一行

if(i == n)

//對應特殊處理4.2

//如果最後乙個空格正好大於maxwidth,需要刪去

tmp.

deletecharat

(tmp.

length()

-1);

for(

int j = tmp.

length()

; j < maxwidth; j++

) res.

add(tmp.

tostring()

);break;}

// 所有單詞長度

int all_word_len =0;

for(

int j = left; j < i; j++

)// 至少空格個數,也就是 4個單詞,三個空格

int space_num = i - left -1;

// 需要填充的空格數量

int remain_space = maxwidth - all_word_len;

int a =0;

int b =0;

//i不等於n,能放下多個單詞,就需要計算空格平均分配

if(space_num !=0)

//空格平均分配

for(

int j = left; j < i; j++)if

(b !=0)

} tmp.

(words[j]);

}//i不等於n,而且只能放下乙個單詞,就需要執行下面語句,因為上面的for迴圈並沒有加入空格

//對應特殊處理4.1

for(

int j = tmp.

length()

; j < maxwidth; j++

) res.

add(tmp.

tostring()

);}return res;

}}

leetcode 68 文字左右對齊

原理很簡單,但是寫起來比較複雜,首先將不超過maxwidth的字串放入乙個新的陣列result,不要忽略空格所佔空間 對result進行處理,首先去除字串最後面的乙個或多個空格,然後計算去除空格後的字串大小,用過最大大小減去去除空格之後的字串大小,得到d 用除以單詞個數 1 即為原來每個空格位置需要...

LeetCode68 文字左右對齊

給定乙個單詞陣列和乙個長度 maxwidth,重新排版單詞,使其成為每行恰好有 maxwidth 個字元,且左右兩端對齊的文字。你應該使用 貪心演算法 來放置給定的單詞 也就是說,盡可能多地往每行中放置單詞。必要時可用空格 填充,使得每行恰好有 maxwidth 個字元。要求盡可能均勻分配單詞間的空...

Leetcode 68文字左右對齊 C

思路 貪心演算法,一行一行的處理。1.首先要確定每一行能放下的單詞數。具體方法是 將單詞數n和空格數n 1與每 一行的最大字元數maxwidth來比較。2.確定了單詞數後,還要判斷是否為最後一行,最後一行每個單詞間加乙個空格。如果不是最後一行,要判斷空格數和單詞的間隔數n 1是否整除,整除的話空格數...