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是否整除,整除的話空格數...