題目如下:(題目鏈接戳我)
我們要把給定的字符串 S 從左到右寫到每一行上,每一行的最大寬度為100個(gè)單位嘶摊,如果我們?cè)趯懩硞€(gè)字母的時(shí)候會(huì)使這行超過了100 個(gè)單位,那么我們應(yīng)該把這個(gè)字母寫到下一行评矩。我們給定了一個(gè)數(shù)組 widths 叶堆,這個(gè)數(shù)組 widths[0] 代表 'a' 需要的單位, widths[1] 代表 'b' 需要的單位斥杜,...虱颗, widths[25] 代表 'z' 需要的單位。
現(xiàn)在回答兩個(gè)問題:至少多少行能放下S蔗喂,以及最后一行使用的寬度是多少個(gè)單位忘渔?將你的答案作為長度為2的整數(shù)列表返回。
示例 1:
輸入:
widths = [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
S = "abcdefghijklmnopqrstuvwxyz"
輸出: [3, 60]
解釋:
所有的字符擁有相同的占用單位10缰儿。所以書寫所有的26個(gè)字母畦粮,
我們需要2個(gè)整行和占用60個(gè)單位的一行。
示例 2:
輸入:
widths = [4,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
S = "bbbcccdddaaa"
輸出: [2, 4]
解釋:
除去字母'a'所有的字符都是相同的單位10,并且字符串 "bbbcccdddaa" 將會(huì)覆蓋 9 * 10 + 2 * 4 = 98 個(gè)單位.
最后一個(gè)字母 'a' 將會(huì)被寫到第二行宣赔,因?yàn)榈谝恍兄皇O?個(gè)單位了预麸。
所以,這個(gè)答案是2行儒将,第二行有4個(gè)單位寬度吏祸。
class Solution {
public int[] numberOfLines(int[] widths, String S) {
}
}
以下是我的解題思路:
- 將
S
轉(zhuǎn)換為字符數(shù)組chars
; - 將字符數(shù)組
chars
強(qiáng)轉(zhuǎn)為int
數(shù)組letters
钩蚊; - 將
letters
中每個(gè)元素都減去97
贡翘,這樣就變成可以匹配數(shù)組下標(biāo)的int
數(shù)組了; - 循環(huán)
letters
砰逻,用letters
中的元素作為下標(biāo)床估,取出widths
中的每個(gè)數(shù)字,并求它們的和sum
诱渤,當(dāng)sum
大于100
時(shí)丐巫,表明該換行了,將當(dāng)前數(shù)字賦值給sum
勺美,并將行數(shù)line
加1
递胧; - 最后將行數(shù)
line
和sum
賦值給結(jié)果數(shù)組result
,并返回赡茸;
代碼如下:
class Solution {
public int[] numberOfLines(int[] widths, String S) {
//將 S 轉(zhuǎn)換為字符數(shù)組
char[] chars = S.toCharArray();
//將字符數(shù)組轉(zhuǎn)換為 int 數(shù)組
int[] letters = new int[chars.length];
for (int i = 0; i < chars.length; i++) {
//將 int 數(shù)組調(diào)整為與數(shù)組下標(biāo)對(duì)應(yīng)的 int 數(shù)組
letters[i] = chars[i] - 97;
}
int sum = 0;
int line = 1;
for (int letter : letters) {
//用 letters 數(shù)組元素作為下標(biāo)缎脾,依次取出每個(gè)字母占用的單位數(shù);
//數(shù)量累加到一個(gè)和 sum 中
sum += widths[letter];
//當(dāng) sum 大于 100 時(shí)占卧,sum 賦值為當(dāng)前的單位數(shù)遗菠,并且行數(shù)加 1,繼續(xù)下輪循環(huán)华蜒;
if (sum > 100) {
sum = widths[letter];
line++;
}
}
int[] result = new int[2];
result[0] = line;
result[1] = sum;
return result;
}
}