时间过得真是好快,过了怎样的一年半一言难尽
又到了找暑假实习的时候,翻出这个博客作为午夜余兴
今天找了这么一个题,不知道这赶脚像是高中数学题的题目还算不算算法题,哈哈
给你这么个数列
112123123412345123456123456712345678123456789123456789101234567891011...
看出规律了吗 这个数列是由下列数列串合而成:
1
12
123
1234
12345
123456
1234567
12345678
123456789
12345678910
1234567891011
12345678910...
...
现在问题是给定1<=i<=2147483647
要求此数列的第i位
我的思路是这样哒,这些数列串应该分类讨论,最后一个数是1位的,最后一个数是2位的,最后一个数是3位的……
这样就比较容易计算每个数列串的长度,由于i的范围是有限度的,所以可以事先把以n位结尾的数列串的最大长度算出来,接下来就可以分情况讨论啦
然后总数列也可以切分为这么几段来计算了:
设现在有k个数列串组成了整个数列
k是1位数的数列中,length = ( 1 + k ) * k / 2
k是2位数的数列中,length = ( 1 + 9 ) * 9 / 2 * ( 1 + k - 9 ) + 2 * ( 1 + k - 9 ) * ( k - 9 ) / 2
k是3位数的数列中,length = ( 1 + 9 ) * 9 / 2 * ( 1 + 99 - 9 ) + 2 * ( 1 + 99 - 9 ) * ( 99 - 9 ) / 2 + 3 * ( 1 + k - 99 ) * ( k - 99 ) / 2
.
.
.
然后算出k作为各个位数的最大长度,对于给出的i判定在哪个区间内,然后就可以代入计算i落在哪个k,k+1之间然后就容易计算啦~
就算这个傻博客木有人看,算是自己对自己的督促吧~括弧笑~