题目:
4和7是两个幸运数字,我们定义,十进制表示中,每一位只有4和7两个数的正整数都是幸运数字。前几个幸运数字是:4,7,44,47,74,77,444,447…
输入:
数字k
输出:
第k个幸运数
样例输入:
3
5
100
10000000
样例输出:
74
744747
44774447447477474444447
思路:
使用完全二叉树的思想,假设根节点为第0个数,值为-1;第1个数值为4,第2个数值为7,第3个数值为4,第4个数值为7,以此类推,即第奇数个数值为4,第偶数个数值为7。同时将其转为完全二叉树,如图所示:
于是第k个幸运数就是从位置为k的叶子结点向上遍历直到根节点的左或右子节点的路径。根据完全二叉树的性质,可以由子节点的位置求得其父节点的位置。若子节点是奇数位置n,则其父节点是(n-1)/2;若子节点是偶数位置,则其父节点是(n-2)/2。遍历过程中拼接字符串即可得到幸运数。
代码:
public void luckyNu