Python 3.x 来自codewars站点的块序列挑战(Python 3)

Python 3.x 来自codewars站点的块序列挑战(Python 3),python-3.x,algorithm,Python 3.x,Algorithm,我试图从Codewars网站上找出一个问题 考虑以下数组: [1、12、123、1234、12345、1234567、12345678、123456789、123456789、12345678910、1234567891011……] 考虑由上述数组中的数字组成的序列: [1,1,2,1,2,3,1,2,3,4,1,2,3,4,5,1,2,3,4,5,6,…] 您将得到一个数字(n),您的任务是返回序列中该索引处的元素,其中1≤ N≤ 10^18. 假设索引以1开始,而不是0。例如: 解算(1)=

我试图从Codewars网站上找出一个问题

考虑以下数组:

[1、12、123、1234、12345、1234567、12345678、123456789、123456789、12345678910、1234567891011……]

考虑由上述数组中的数字组成的序列:

[1,1,2,1,2,3,1,2,3,4,1,2,3,4,5,1,2,3,4,5,6,…]

您将得到一个数字(n),您的任务是返回序列中该索引处的元素,其中1≤ N≤ 10^18. 假设索引以1开始,而不是0。例如:

解算(1)=1,因为序列中的第一个字符是1。没有索引0。 解算(2)=1,因为第二个字符也是1。 解算(3)=2,因为第三个字符是2

我的代码:

def solve(n):
    s = ''
    for i in range(1,round(n)):
        for x in range(1,i+1):
            s += str(x) 
            if len(s) >= n:
                return (s[n-1])

但问题在于数字太高。我的代码无法解决大于10^7的数字。有人能告诉我该改进什么吗?

这种方法行不通。没有什么可以改进的。你需要一个完全不同的方法。想想那些每次只增加一个数字,每次增加两个数字的部分,等等,它们的第一个/最后一个索引,然后看看这样一个部分中数字的增长率,…等等。需要一些涉及三角形数字的数学。这种方法行不通。没有什么可以改进的。你需要一个完全不同的方法。想想那些每次只增加一位数字的部分,那些每次增加两位数字的部分,等等,它们的第一个/最后一个索引,然后看看这样一个部分中数字的增长率,…等等。需要一些涉及三角形数字的数学。