我们有一个递增序列,其中每个元素都由偶数字(0、2、4、6、8)组成。如何找到该序列中的第n个数字?是否可以在O(1)时间内找到该序列中的第n个数字?
序列:0、2、4、6、8、20、22、24、26、28、40、42、44、46、48、60、62、64、66、68、80、82、84、86、88、200、202等。
序列:0、2、4、6、8、20、22、24、26、28、40、42、44、46、48、60、62、64、66、68、80、82、84、86、88、200、202等。
该序列的第n个数字是将n转换为5进制,并且将每个数字都乘以2得到的结果。
def base5(n):
if n == 0: return
for x in base5(n // 5): yield x
yield n % 5
def seq(n):
return int(''.join(str(2 * x) for x in base5(n)) or '0')
for i in xrange(100):
print i, seq(i)
这个算法的时间复杂度为O(log n)。我认为不可能在O(1)时间内完成。
将数字的加倍与n的5进制数生成相结合可以使它更简便:
def seq(n):
return 10 * seq(n // 5) + (n % 5) * 2 if n else 0
int Code()
{
k=0;
for(i=0;i<=10000;i++)
{
count=0;
n=i;
while(n!=0)
{
c=n%10;
n=n/10;
if(c%2!=0)
{
count=1;
}
}
if(count==0)
{ a[k]=i;
k++;}
}
}