|
|
1
22
编辑:解决了! 可以创建按排序顺序输出数字的生成器。我想我们大多数人都知道一些比较串联字符串的规则:
如果您从前1000个数字的排序列表开始,您可以通过添加“千”或“百万”并连接另一组1000个数字来轻松生成其余的数字。
跑步花了一段时间,大约一个小时。第510亿个字符是600个eventysixmillions甚至100个fortysixth和500个eventyfive中的最后一个字符,此时的整数之和为413540008163475743。 |
|
|
2
15
我会对前20个整数的名字和十、百、千的名字进行排序,计算出每一个都有多少个数字,然后从那里开始。
例如,前几个是
以“八”开头的数字是8。以“八”开头的数字是800-899、800000-899999、80000000-89999999。依此类推。 可以找到0(由空字符串表示)到99的字串联中的字母数并求和;对于更高的范围,可将其乘以“千”=8或“百万”=7。800-899的值将是“eighthundred”长度加上0-99长度的100倍。依此类推。 |
|
|
4
9
这些字符串将有很多常见的前缀,这是 trie |
|
|
5
3
(第一次尝试这一点是错误的,但我将放弃它,因为在解决问题的过程中看到错误比看到最终答案更有用。) 我首先生成从0到999的字符串,并将它们存储到一个名为千字符串的数组中。0元素为“”,并且“”表示以下列表中的空白。 千禧字符串设置使用以下内容:
千禧字符串设置如下所示:
然后,我将按字母顺序对数组进行排序。 然后,假设t1 t2 t3是从千串中提取的字符串,则所有字符串都具有以下形式 t1
t1+1000000+t2+000+t3 或 t1+000+t2
其中,过程意味着存储以前的和长度,然后将新字符串长度添加到和中,如果新和为>=你的目标和,你吐出结果,也许返回或打破循环,任何让你高兴的事情。
第二次尝试,其他答案是正确的,您需要使用3k字符串而不是1k字符串作为基础。 从上面的千弦开始,但把空白“0”。这就剩下999个元素,并将其称为uStr(单位字符串)。 再创建两个集合:
现在再创建两个集合联合:
|
|
|
6
3
下面是我的python解决方案,它可以在几分之一秒内打印出正确的答案。一般来说,我不是python程序员,因此对于任何令人震惊的代码风格错误,我深表歉意。
它的工作原理是预先计算1..999和1..999999之间的数字长度,这样它就可以跳过整个子树,除非它知道答案在子树的某个地方。 |
|
|
7
2
我所做的: 1) 遍历1-999,并为每一个生成单词。 2) 创建3个数据结构,其中每个节点都有一个指向子节点的指针,每个节点都有一个字符值和一个指向同级节点的指针(二叉树,事实上,但我们不想这样认为——对我来说,它更容易被概念化为一个兄弟姐妹的列表,孩子的列表悬而未决,但如果你想一想{画一张图片},你会发现它实际上是一个二叉树)。 a) 第一个是生成的单词(即1-999按字母顺序排序) c) B中的所有值+a中的所有值加上百万(总共2997个值) 3) 对于(b)中的每个叶节点,添加一个子节点作为(a)。对于(c)中的每个叶节点,添加一个子节点作为(b)。 4) 遍历这棵树,数一数我们经过了多少个字符,然后停在510亿。 注意:这不会求和(我最初读取时没有读取该位),运行时间仅超过3分钟(使用c++,通常约192秒)。
|
|
|
8
1
奇怪但有趣的想法。 构建一个稀疏列表,列出从0到9,再到10-90乘以10,再到100,1000等等,再到十亿,索引是存储长度的整数部分的值。 编写一个函数,使用表将数字计算为字符串长度。 (将数字分成几部分,并查找围裙的长度,但实际上从未创建字符串。) 然后你只需要在遍历这些数字的时候做数学运算,从这些数字计算长度 为您的总和填写表格。 通过求和和和最后一个整数的值,算出拼写的整数,然后volia,就完成了。 |
|
|
9
1
简单地说,不要存储“onethousandleventyseven”单词,而是编写排序以在比较时使用它。
“numberToWords”留给读者作为练习。 |
|
|
10
0
是否需要将整个字符串保存在内存中?
|
|
|
11
0
二十 然后我会看着你 进一步基于可能的前缀。例如,在ninehundred中,您将拥有所有必须从900开始的相同桶,仅适用于从900开始的数字。 |
|
|
12
0
问题在于高效的数据存储,而不是字符串操作。创建一个枚举来表示单词。单词应该以排序的顺序出现,这样当需要排序时,它只是一个简单的比较。现在生成列表并进行排序。使用这样一个事实,即您知道每个单词与枚举结合的时间长度,以添加到所需的字符。 |
|
|
13
0
代码赢了。。。
测试范围小得多;-)。需要大量的磁盘空间,一个压缩的文件系统是有价值的,但是没有那么多内存。 Sort也有压缩工作文件的选项,您可以加入gzip直接压缩数据。 这不是最快捷的解决方案。 但它确实有效。 |
|
|
14
0
可能会让服务器崩溃一段时间,因为它需要执行大量磁盘IO,但总体而言,我认为我可以比编写程序的人更快地找到答案。 有时候,客户真正想要的就是完成它,而不在乎您使用了什么花哨的设计模式或数据结构。 |
|
|
15
0
计算出1-999的长度,并将0的长度包含为0。 (不打算详细介绍生成此文件的过程) 还需要一千个最后字母的数组last_letters[1000] (同样,我不打算详细介绍生成该循环的细节,因为它更容易,即使是数百个d,甚至是十个y,除了10,它是n个其他循环,尽管最后一个是on) E 通过nin E 零是不相关的)
//现在使用i j k通过使用last_letters999获取最后一个字母 //把i,j,k想象成以1000为基数的数字
//如果只有k=0,那么字母是d千 D //其他明智的做法是使用自 //以1000为基数的单位,即k,不是零 //对于数字i、j、k之和,是以1000为基数的数字
//表示数字和用途
如果您需要对51000000000以外的数字进行计算,那么也要计算SUM_sizes999,并以自然的方式使用它。
总时间:0(n),其中n是数字 |
|
|
16
0
这就是我要做的:
创建此数组后,可以根据以下观察结果按字母顺序直接查找所有99999999字符串:
在每一步中,只需保持两个运行总数,就可以计算字符串的总长度和数字的总和。 |
|
|
17
0
对我来说,这需要一个动态规划解决方案,其中计算出数十、数百、数千等字符串的数量,并将其存储在某种类型的查找表中。当然,会有一对十一,二对十二等特殊情况 如果我能得到一个快速运行的解决方案,我会更新这个。 |
|
|
18
0
错了!!!!!!!!!我把问题看错了。我以为它的意思是“按字母顺序排列的最后一个数字的最后一个字母是什么”
还没有真正尝试过这个:/LOL |
|
|
19
0
你有10亿个数字和510亿个字符-这很可能是一个诡计问题,因为每个数字平均有51个字符。把所有数字的换算加起来,看看总数是否达到510亿。
|
|
|
20
0
我在2008年的某个时候用Java解决了这个问题,并将其作为应用程序的一部分 ITA Software . 代码很长,现在已经三年过去了,我带着一点恐惧看着它。。。所以我不打算发了。 但我会引用我在应用程序中包含的一些注释。
我没有得到这份工作,但后来将代码用作另一份工作的“代码示例”,我确实得到了这份工作。 Java代码使用这些技术跳过大部分显式计数并在大约8秒内添加运行。 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 2 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 2 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 2 年前 |