本文概述
- C ++
- Java
- Python3
- C#
- 的PHP
【在只允许使用2位数字(4和7)的序列中查找第n个元素|S2 (log(n)方法)】例子:
Input : n = 2
Output : 7Input : n = 3
Output : 44Input: n = 5
Output : 74Input: n = 6
Output : 77
我们在下面的文章中讨论了O(n)解决方案。
在只允许两位数字(4和7)的序列中查找第n个元素
在这篇文章中, 将讨论O(log n)解决方案, 该解决方案基于以下数字模式。可以看到数字
""
/\
47
/\/\
44477477
/\/\/\/\
这个想法是从头开始填写所需的数字。我们知道可以观察到, 如果n为奇数, 则最后一位为4, 如果n为偶数, 则最后一位为7。填完最后一位数字后, 我们移至树中的父节点。如果n为奇数, 则父节点对应于(n-1 / 2。其他父节点对应于(n-2)/ 2。
C ++
//C++ program to find n-th number containing
//only 4 and 7.
#include<
bits/stdc++.h>
using namespace std;
string findNthNo( int n)
{
string res = "" ;
while (n>
= 1)
{
//If n is odd, append 4 and
//move to parent
if (n &
1)
{
res = res + "4" ;
n = (n-1)/2;
}//If n is even, append 7 and
//move to parent
else
{
res = res + "7" ;
n = (n-2)/2;
}
}//Reverse res and return.
reverse(res.begin(), res.end());
return res;
}//Driver code
int main()
{
int n = 13;
cout <
<
findNthNo(n);
return 0;
}
Java
//java program to find n-th number
//containing only 4 and 7.
public class GFG {static String findNthNo( int n)
{
String res = "" ;
while (n>
= 1 )
{//If n is odd, append
//4 and move to parent
if ((n &
1 ) == 1 )
{
res = res + "4" ;
n = (n - 1 ) /2 ;
}//If n is even, append
//7 and move to parent
else
{
res = res + "7" ;
n = (n - 2 ) /2 ;
}
}//Reverse res and return.
StringBuilder sb =
new StringBuilder(res);
sb.reverse();
return new String(sb);
}//Driver code
public static void main(String args[])
{
int n = 13 ;
System.out.print( findNthNo(n) );
}
}//This code is contributed by Sam007
Python3
# Python3 program to find
# n-th number containing
# only 4 and 7.
def reverse(s):
if len (s) = = 0 :
return s
else :
return reverse(s[ 1 :]) + s[ 0 ]def findNthNo(n):
res = "";
while (n>
= 1 ):# If n is odd, append
# 4 and move to parent
if (n &
1 ):
res = res + "4" ;
n = ( int )((n - 1 ) /2 );
# If n is even, append7
# and move to parent
else :
res = res + "7" ;
n = ( int )((n - 2 ) /2 );
# Reverse res
# and return.
return reverse(res);
# Driver code
n = 13 ;
print (findNthNo(n));
# This code is contributed
# by mits
C#
//C# program to find n-th number
//containing only 4 and 7.
using System;
class GFG {static string findNthNo( int n)
{
string res = "" ;
while (n>
= 1)
{//If n is odd, append 4 and
//move to parent
if ((n &
1) == 1)
{
res = res + "4" ;
n = (n - 1) /2;
}//If n is even, append 7 and
//move to parent
else
{
res = res + "7" ;
n = (n - 2) /2;
}
}//Reverse res and return.
char [] arr = res.ToCharArray();
Array.Reverse(arr);
return new string (arr);
}//Driver Code
public static void Main()
{
int n = 13;
Console.Write( findNthNo(n) );
}
}//This code is contributed by Sam007
的PHP
<
?php
//PHP program to find
//n-th number containing
//only 4 and 7.function findNthNo( $n )
{
$res = "" ;
while ( $n>
= 1)
{
//If n is odd, append
//4 and move to parent
if ( $n &
1)
{
$res = $res . "4" ;
$n = (int)(( $n - 1) /2);
}//If n is even, append
//7 and move to parent
else
{
$res = $res . "7" ;
$n = (int)(( $n - 2) /2);
}
}//Reverse res
//and return.
return strrev ( $res );
}//Driver code
$n = 13;
echo findNthNo( $n );
//This code is contributed
//by mits
?>
输出如下:
774
在此代码中, 总复杂度为O(log n)。因为while循环运行log(n)次。
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- CSS如何使用3D变换(代码示例)
- Western Digital面向经验分享| FTE招聘校园
- 如何从给定的C/C++程序中删除注释()
- Android Intent实现界面跳转切换,随时记录一下
- android的service
- 安卓 开源框架xUtils
- Xamarin Android 应用程序内图标上数字提示
- ECLIPSE ANDROID PROJECT IMPORT SUMMARY
- 安卓图片代码压缩(效果简直爆炸)