Easy 0 solved 0% acceptance

Collatz Sequence

Follow the halve-or-triple-and-add-one rule until reaching 1.

What you'll learn

  • Follow a rule until a condition is met
  • Count the steps taken
  • Branch on even and odd values

Problem

Start with n. If it is even, divide it by 2; if it is odd, multiply it by 3 and add 1. Repeat until the value is 1. Include both the starting value and the final 1 in your answer.

Implement collatz_sequence(n).

Input

n: The positive starting integer.

Output

Return the complete sequence in order.

Constraints

1 ≤ n ≤ 10,000. Inputs in this range reach 1 under this rule; all sequence values fit a signed 64-bit integer.

Examples

Example 1
Input:
n = 6

Expected output:
expected = [6, 3, 10, 5, 16, 8, 4, 2, 1]
Input:
long long n = 6;

Expected output:
std::vector<long long> expected = {6, 3, 10, 5, 16, 8, 4, 2, 1};
Input:
long n = 6;

Expected output:
long[] expected = new long[] {6, 3, 10, 5, 16, 8, 4, 2, 1};

Explanation

6 is even, so it becomes 3. Then 3 becomes 10. Continue applying the rule until 1.

Example 2
Input:
n = 1

Expected output:
expected = [1]
Input:
long long n = 1;

Expected output:
std::vector<long long> expected = {1};
Input:
long n = 1;

Expected output:
long[] expected = new long[] {1};

Explanation

The starting value is already 1, so no transformations are needed.

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

The sequence is generated by repeatedly applying one rule based on whether the current number is even or odd.

Hint 2

Keep appending each new value until you reach 1.

Hint 3

Watch out that the starting value itself and the final 1 must both appear in the result.

Expected complexity

O(k) time, O(k) extra space, where k is the sequence length

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.