本文已参与「新人创作礼」活动,一起开启掘金创作之路。
| 每日一题做题记录,参考官方和三叶的题解 |
题目要求
思路:模拟
简单题……就模拟呗……
定义为当前所在的行,定义表示当前行字符串末端位置。
用Unicode取每个字符的宽度,然后——
- ,则该字符可以放在当前行;
- ,该字符越界,需要放到下一行,自增,重新计数为当前字符长度。
Java
class Solution {
public int[] numberOfLines(int[] widths, String s) {
int row = 0, cur = 0;
for(char c : s.toCharArray()) {
int w = widths[c - 'a'];
if(cur + w > 100 && ++row >= 0)
cur = w;
else
cur += w;
}
if(cur != 0)
row++;
return new int[]{row, cur};
}
}
- 时间复杂度:
- 空间复杂度:,因为用了
toCharArray
Java+1
给空间复杂度降到,也就是把toCharArray换成charAt
class Solution {
public int[] numberOfLines(int[] widths, String s) {
int row = 0, cur = 0;
for(int i = 0; i < s.length(); i++) {
int w = widths[s.charAt(i) - 'a'];
if(cur + w > 100 && ++row >= 0)
cur = w;
else
cur += w;
}
if(cur != 0)
row++;
return new int[]{row, cur};
}
}
- 时间复杂度:
- 空间复杂度:
C++
class Solution {
public:
vector<int> numberOfLines(vector<int>& widths, string s) {
int row = 0, cur = 0;
for(int i = 0; i < s.length(); i++) {
int w = widths[s[i] - 'a'];
if(cur + w > 100 && ++row >= 0)
cur = w;
else
cur += w;
}
if(cur != 0)
row++;
return {row, cur};
}
};
- 时间复杂度:
- 空间复杂度:
Python
python没有自增,所以不能偷懒搞恒等式来简化代码,乖乖加一吧。
class Solution:
def numberOfLines(self, widths: List[int], s: str) -> List[int]:
row, cur = 0, 0
for c in s:
w = widths[ord(c) - ord('a')]
if cur + w > 100:
cur = w
row += 1
else:
cur += w
if(cur != 0):
row += 1
return [row, cur]
- 时间复杂度:
- 空间复杂度:
函数ord()
- 学习参考链接
- 返回字符的ASCII数值或Unicode数值,仅可传入字符作为参数,返回值为十进制整数。
总结
……模拟就没啥好说的,顺着思路走就完了……实在没啥好分析的
【属于是嫌简单题简单嫌困难题麻烦】
| 欢迎指正与讨论! |