Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 40 additions & 0 deletions java/17_Letter_Combinations_of_a_Phone_Number.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
class Solution {
// make list for return.
public ArrayList<String> list = new ArrayList<>();
// make array for get phone number's characters.
public char[][] arr = {
{'0', '0', '0', '-'},
{'0', '0', '0', '-'},
{'a', 'b', 'c', '-'},
{'d', 'e', 'f', '-'},
{'g', 'h', 'i', '-'},
{'j', 'k', 'l', '-'},
{'m', 'n', 'o', '-'},
{'p', 'q', 'r', 's'},
{'t', 'u', 'v', '-'},
{'w', 'x', 'y', 'z'},
};

// main function
public List<String> letterCombinations(String digits) {
addString(digits, 0, "");
return list;
}

// axiom : if input == "", return []
// if index == digits.length(), add str in list
// else do loop number's character, and function recursion.
public void addString(String digits, int index, String str) {
if(digits.equals("")) return;
if(index == digits.length()) {
list.add(str);
}
else {
for(int i = 0; i < 4; i++) {
int number = Integer.parseInt(digits.charAt(index) + "");
if(arr[number][i] == '-') continue;
addString(digits, index + 1, str + arr[number][i]);
}
}
}
}
26 changes: 26 additions & 0 deletions java/22_Generate_Parentheses.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
class Solution {
// main function
public List<String> generateParenthesis(int n) {
ArrayList<String> list = new ArrayList<>();
rec(list, "(", n - 1, n);
return list;
}

// axiom : if start == end == 0, add str in list.
// IDEA :
// In well-formed parentheses
// close character(")") has to be bigger than open character("(")
// So, we can solve this problem with recursion.
public void rec(List<String> list, String str, int start, int end) {
if(start == 0 && end == 0) {
list.add(str);
}

if(start > 0) {
rec(list, str + "(", start - 1, end);
}
if(end > start) {
rec(list, str + ")", start, end - 1);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
class Solution:
def canBeIncreasing(self, nums: List[int]) -> bool:
# bruteforcing the whole idxes.
canBe = [0] * len(nums)

# choosing the idx that will be removed.
for bannedIdx in range(len(nums)):
Flag = 1

# if the bannedIdx is 0 than the startIdx will be 2.
# when bannedIdx is 0, idx 2 is the first element that has a previous element.
# In other cases, idx 1 is the one.
for i in range(1 if bannedIdx != 0 else 2, len(nums)):
# if i is bannedIdx than just skip it.
if i == bannedIdx:
continue

# if the previous element is banned.
# compare [i] with [i - 2]
if i - 1 == bannedIdx:
if nums[i] <= nums[i - 2]:
Flag = 0
break
continue

# compare [i] with [i - 1]
if nums[i] <= nums[i - 1]:
Flag = 0
break

# end of loop we will get Flag that has a 0 or 1 value.
canBe[bannedIdx] = Flag

if sum(canBe) > 0:
return True
return False

38 changes: 38 additions & 0 deletions python/2409_Count_Days_Spent_Together.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
class Solution:
def countDaysTogether(self, arriveAlice: str, leaveAlice: str, arriveBob: str, leaveBob: str) -> int:
# split the dates to month and day.
arriveAliceMonth, arriveAliceDay = map(int, arriveAlice.split("-"))
leaveAliceMonth, leaveAliceDay = map(int, leaveAlice.split("-"))
arriveBobMonth, arriveBobDay = map(int, arriveBob.split("-"))
leaveBobMonth, leaveBobDay = map(int, leaveBob.split("-"))

# prefixOfCalendar : initialize the calendar and in the past we will use this to convert month to day, index is 1 - based
# spentTogether, aliceSpent : work as cache list. and index is 1 - based
calendar = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
prefixOfCalendar = [0] * 13
totalDates = sum(calendar)
spentTogether, aliceSpent = [0] * (totalDates + 1), [0] * (totalDates + 1)

# calculate the prefix of calendar
for i in range(1, len(calendar)):
prefixOfCalendar[i] = prefixOfCalendar[i - 1] + calendar[i]

# if the string is "01-15", it can be treat as 15 days.
# if the string is "02-27", it can be treat as 58 days.
# So, it can be "prefixOfCalendar[month - 1] + day"
# and in the problem it includes the leaveDate so +1 need to be in .
arriveAliceTotal = prefixOfCalendar[arriveAliceMonth - 1] + arriveAliceDay
leaveAliceTotal = prefixOfCalendar[leaveAliceMonth - 1] + leaveAliceDay
for i in range(arriveAliceTotal, leaveAliceTotal + 1):
aliceSpent[i] += 1

# check the aliceSpent[i] is True.
# if it is, they spentTogether is True too.
arriveBobTotal = prefixOfCalendar[arriveBobMonth - 1] + arriveBobDay
leaveBobTotal = prefixOfCalendar[leaveBobMonth - 1] + leaveBobDay
for i in range(arriveBobTotal, leaveBobTotal + 1):
if aliceSpent[i]:
spentTogether[i] += 1

# I used list because of this sum function.
return sum(spentTogether)
15 changes: 15 additions & 0 deletions python/2413_Smallest_Even_Multiple.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
class Solution:
def smallestEvenMultiple(self, n: int) -> int:
"""
n : positive integer
return : smallest positive integer that is a multiple of both 2 and n
"""
if n % 2 == 0:
# if n is alreay muliply by 2
# return itself
return n

# if previous condition is false
# n * 2 is the smallest positive integer.
return n * 2