HackerRank Staircase

Problem

Consider a staircase of size n = 4:

   #
  ##
 ###
####

Write a program that prints a staircase of size n.

Solution

For every n size there are n elements to print which makes the overall complexity O(N^2).

Naive solution

In the simple case string concatenation is used to build a row and then the row is printed.

Time = O(N^2) Space = O(N)

Staircase naive in Python 3

def staircase(n):
    for i in range(1, n + 1):
        spaces = " " * (n - i)
        stairs = "#" * i
        print(spaces + stairs)

Space optimized solution

Since N inputs must be evaluated N times the time complexity must be N^2.

Storage can be reduced to constant time by comparing whether the column is within a boundary value.

The model is a square matrix where every value past the diagonal is filled.

0001
0011
0111
1111

This is determined by boundary = size - (row + 1).

Time = O(N^2) Space = O(1)

Staircase optimized in Python 3

def staircase(n):
    for x in range(n**2):
        i, j = divmod(x, n)
        if j >= (n - (i + 1)):
            print("#", end="")
            if j == (n - 1):
                print()
        else:
            print(" ", end="")