입력이 "N"인 경우 길이가 N 인 목록의 번호를 찾아야 만합니다. 추가 할 다음 번호가 추가 된 최대 숫자보다 1 많아야합니다 지금까지. 예를 들어,최적 알고리즘
N = 3, 가능한 목록 => (111, 112, 121, 122, 123), [113 또는 131은 목록에 '3'을 추가하는 것처럼 불가능하며, 리스트는 '1'이 될 것이고 따라서 우리는 단지 1 또는 2를 더할 수있다.
N = 4 인 경우, 목록 1213은 3을 추가하는 것처럼 가능하며 목록의 최대 개수는 '2'이므로 3을 더할 수 있습니다.
문제는 주어진 입력 "N"에 대해 가능한 그러한 목록의 수를 세는 것입니다.
내 코드는 다음과 같습니다 - 무력 방법입니다
public static void Main(string[] args)
{
var noOfTestCases = Convert.ToInt32(Console.ReadLine());
var listOfOutput = new List<long>();
for (int i = 0; i < noOfTestCases; i++)
{
var requiredSize = Convert.ToInt64(Console.ReadLine());
long result;
const long listCount = 1;
const long listMaxTillNow = 1;
if (requiredSize < 3)
result = requiredSize;
else
{
SeqCount.Add(requiredSize, 0);
AddElementToList(requiredSize, listCount, listMaxTillNow);
result = SeqCount[requiredSize];
}
listOfOutput.Add(result);
}
foreach (var i in listOfOutput)
{
Console.WriteLine(i);
}
}
private static Dictionary<long, long> SeqCount = new Dictionary<long, long>();
private static void AddElementToList(long requiredSize, long listCount, long listMaxTillNow)
{
if (listCount == requiredSize)
{
SeqCount[requiredSize] = SeqCount[requiredSize] + 1;
return;
}
var listMaxTillNowNew = listMaxTillNow + 1;
for(var i = listMaxTillNowNew; i > 0; i--)
{
AddElementToList(requiredSize, listCount + 1,
i == listMaxTillNowNew ? listMaxTillNowNew : listMaxTillNow);
}
return;
}
. 문제의 가장 좋은 알고리즘이 무엇인지 알고 싶습니다. 추신 : 나는 그러한 목록의 수를 알고 싶습니다. 그래서 모든 목록을 만들 필요는 없습니다. (코드에서 내가하는 방법) 알고리즘에 전혀 좋지 않으므로 긴 질문에 대해 변명하십시오.
숙제입니까? 게시 한 텍스트가 정확하게 질문입니까? 나는 질문을 제대로 이해하지 못해서 물어 본다. 숙제 일 경우 정확한 질문을 게시 할 수도있다. – gbulmer
아니 아니 숙제, 그냥 친구가 내게 물었다 퍼즐, 질문에 대한 몇 가지 의심이 있다면, 내가 물어볼 수 있습니다, 내가 명확히 수 있습니다. – user1045047
오케이 - 111은 3 개의 값 목록입니까, 아니면 하나의 숫자입니까? – gbulmer