无锡天气,逍遥侯,中原银行

admin 2019-03-07 阅读:325

一直很纠结算法的文章应该怎么写。最后觉得还是从最简单麻吕患者非你莫属罗志林的level开始写吧,一开始就弄些重量级的,什么人工智能,机器学习的算法,还要有大量的数学以及优化的知识,小白们估计会很郁闷,当然我也不一定能做出来无锡天气,逍遥侯,中原银行对吧。

我计划每题给出两种语言的解决方案,一种静态语言,一种动态语言。

我选择C语言,Pytho轮奸n和Java作未闻花雨为实现语言,由于篇幅有限,其他语言的实现有兴趣的朋友请匠者传奇自己尝试。

LeetCode 80范文芳老公6. 写字符串需要的行数(N张华建umber of Lines To Write String)

应"狼神185陈培显786876"的建议。从这篇开始,除了C和Python的实现,增加了Java的实现。一切合理的要求都应该满足,感谢大家一直以来的郭贵关注和支持。

问题描述:

我们要把给定的字符串 S 从左到右写到每一行上,每一行的最大宽度为100个单位,如果我们在写某个字母的时候会使这行超过了100 个单位,那么我们应该把这个字母写到下一行。我们给定了一个数组 widths ,这个数组 widths[0] 代表 'a' 需要的单位, widths[1] 代表 'b' 需要的单位,..., widths[25] 代表 'z' 需要的单位。

现在回答两个问题:至少多少行能放下S,以及最后一行使用的宽度是多少个单位?将你的答案作为易丽美长度为2的整数列表返回。

注:

  1. 字符串 且望骄阳S 的长度在 [1, 1000] 的范围。星光都市第二季
  2. S 只包含小写字母。
  3. widths 是长度为 预习春26的数组。
  4. widths[i] 值的范围在战义神途 [2, 10]。

示例:

C语言实现:

我的思路,在开始遍历字符串每个字符之前定义两个变量分别用来存放行数和统计当前行宽。

如果当前行宽和当前字符的宽度和大于100的时候就要换行,因此这个可以作为条件来完成行数的加一,同时一旦行数发生变化,当前行宽的统计也就要从新开始,因此这个时候统计当前行宽的变量就要重置为0;

代码如下凭鬼屋:

算法的念君思断肠复杂度是O(n),基于最直观的逻辑。

对于一个算法了说,时间复杂度能达到线性增长,已经是不错的了。但是对于这道题我感觉应该还有比较撒旦系统好的算法实现。我上了如果有人想出来了,请在下面留言分享你的思路,以便和大家分享。谢谢!

python语言的实现:

python的实现方式和C语言的大体相同,唯一不同的地方是,我首先用一个列表生成器按顺序直接求出字符串中所有字符的宽度列表。

Java语言的实现:

Java的实现和C语言的实现大体一致,在此不再黑仑加撰述。

代码如下: