题目
1、题目描述
我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组 widths ,这个数组 widths[0] 代表 ‘a’ 需要的单位, widths[1] 代表 ‘b’ 需要的单位,…, widths[25] 代表 ‘z’ 需要的单位。
现在回答两个问题:至少多少行能放下S,以及最后一行使用的宽度是多少个单位?将你的答案作为长度为2的整数列表返回。
2、原题链接
解题报告
1、解题思路
(
1
)
(1)
(1)模拟即可。
2、解题方法
模拟
2、代码详解
int* numberOfLines(int* widths, int widthsSize, char * s, int* returnSize){
int *ans = calloc(1, sizeof(int) * 2);
int cnt = 0;
int row = 1;
int i, tmp;
for(i = 0; s[i]; ++i){
tmp = widths[s[i] - 'a'];
if( cnt + tmp > 100){
cnt = 0;
++row;
}
cnt += tmp;
}
*returnSize = 0;
ans[(*returnSize)++] = row;
ans[(*returnSize)++] = cnt;
return ans;
}
总结
大水题