Lecture 12

Escher

Announcements

Code Written In Class

#What is the big-o of this? -> O(N**2)
def areAnagrams(s1, s2):
    if(len(s1) != len(s2)): return False #O(1)
    for c in s1: # N times
        if(s1.count(c) != s2.count(c)): return False #O(N)
    return True

import string
#What is the big-o of this? -> O(N)
def betterAreAnagrams(s1, s2):
    d1 = {}
    d2 = {}
    for c in string.ascii_lowercase: # 26 times -> 1 time
        d1[c] = s1.count(c) # O(N)
        d2[c] = s2.count(c) # O(N)
    return d1 == d2 #O(1)
    
#########################################################

def factorial(n):
    if(n <= 1):
        return 1
    else:
        # n > 1
        return n * factorial(n-1)
        
#########################################################

def isEvenHeavy(n):
    odd, even = isEvenHeavyHelper(n, True)
    return even > odd

def isEvenHeavyHelper(n, evenIndex):
    if(n == 0):
        return (0, 0)
    else:
        digit = n%10
        (oddSum, evenSum) = isEvenHeavyHelper(n//10, not evenIndex)
        if(evenIndex):
            return (oddSum, evenSum + digit)
        else:
            return (oddSum + digit, evenSum)
            
#########################################################

def isEvenHeavy(n):
    odd, even = isEvenHeavyHelper(n)
    return even > odd

def isEvenHeavyHelper(n):
    if(n == 0):
        return (0, 0)
    else:
        oddDig, evenDig  = (n//10)%10, n%10 
        oddSum, evenSum = isEvenHeavyHelper(n//100)
        return (oddSum + oddDig, evenSum + evenDig)

Lecture