Javascript 计算段[1,10**n](n<;100)上有多少回文数字
有必要计算[1,10**n]段上有多少回文数字(n我不是100%确定,所以如果我错了,请纠正我。它有效,请检查底部的代码 回文应该有两种:奇数回文和偶数回文。你可以通过在第一个回文后面加上相同的数字并在其前面加上前缀,从一个回文转到另一个(相同类型的)回文。所以 一位数回文:0,1,2,3,4,5,6,7,8,9 对于每个一位数回文,我们可以构造10个三位数回文: 000、101、202、…、010、111、212、…、898、999 同样,对于每3位回文,我们可以构造10个5位回文Javascript 计算段[1,10**n](n<;100)上有多少回文数字,javascript,algorithm,palindrome,Javascript,Algorithm,Palindrome,有必要计算[1,10**n]段上有多少回文数字(n我不是100%确定,所以如果我错了,请纠正我。它有效,请检查底部的代码 回文应该有两种:奇数回文和偶数回文。你可以通过在第一个回文后面加上相同的数字并在其前面加上前缀,从一个回文转到另一个(相同类型的)回文。所以 一位数回文:0,1,2,3,4,5,6,7,8,9 对于每个一位数回文,我们可以构造10个三位数回文: 000、101、202、…、010、111、212、…、898、999 同样,对于每3位回文,我们可以构造10个5位回文 10**n
10**n
将有多达n位的回文。让我们计算一下:
10**1个位数,10**2个3位数,10**3个5位数,…,10**((n+1)/2)个n位数
对于双位数回文(00、11、22、33、44、55、66、77、88、99),也可以这样做,以迭代方式获得偶数位数的回文
然后我们需要删除“非法”数字-以数字0开头的数字
它起作用了,耶
//在不创建数字的情况下计数
函数getSmartCount(n){
让smartPalindromeCount=0;
让零计数启动=0;
对于(让digits=1;digits让我们先从一个较小的问题开始。存在多少个n
位回文数
如果n
为偶数,则让数字的形式为\uuuuuuuuuuuuuu(中点)\uuuuuuuuuuuuuuu
。现在,在第一个数字中,您不能填充0,因此您有9个选项(1-9)。对于n/2
th位的第二个数字,您可以在0-9中填充任何数字。由于我们处理的是回文,数字的后半部分将与前半部分具有相同的数字。因此,使用基本计数,当n
为偶数时,n
位回文的总数为9*[10*10*…10(n/2)-1倍]=9*10^((n/2)-1)
当n
为奇数时,分析将类似,但有两个不同之处:
中点有10个选项(0-9)
中点两侧有(n-1)/2个数字,其中第一个数字不能为0
同样,使用基本计数,如果n
为奇数=9(对于第一个数字)*10(对于中点)*10^((n/2)-2)(剩余数字)=9*(10^(n/2)-1)
,与偶数情况类似
因此,n
数字回文数=9*(10^(n/2)-1)
如果n
大于1,则只需将n
从2循环到100,即可得到所需回文数的总数。尝试找到与n
值相关的递归关系有多少回文长度2k
?有多少回文长度2k+1
?回答这些问题,问题就变得简单了。