diff --git a/combination-sum/delight010.swift b/combination-sum/delight010.swift new file mode 100644 index 000000000..d4e83f451 --- /dev/null +++ b/combination-sum/delight010.swift @@ -0,0 +1,24 @@ +class Solution { + func combinationSum(_ candidates: [Int], _ target: Int) -> [[Int]] { + var result: [[Int]] = [] + var current: [Int] = [] + findCombination(0, target, candidates, ¤t, &result) + return result + } + + func findCombination(_ index: Int, _ target: Int, _ candidates: [Int], _ current: inout [Int], _ result: inout [[Int]]) { + if target == 0 { + result.append(current) + return + } + + for i in index.. Int { + var array = Array(s) + var dp: [Int: Int] = [array.count: 1] + for i in stride(from: array.count - 1, to: -1, by: -1) { + if array[i] == "0" { + dp[i] = 0 + } else { + dp[i] = dp[i + 1] + } + + if i + 1 < array.count && (array[i] == "1" || array[i] == "2" && "0123456".contains(array[i + 1])) { + dp[i, default: 0] += dp[i + 2] ?? 0 + } + } + return dp[0]! + } +} + diff --git a/maximum-subarray/delight010.swift b/maximum-subarray/delight010.swift new file mode 100644 index 000000000..703b0ff57 --- /dev/null +++ b/maximum-subarray/delight010.swift @@ -0,0 +1,12 @@ +class Solution { + func maxSubArray(_ nums: [Int]) -> Int { + var maxSum = nums[0] + var maxEndingHere = nums[0] + for i in 1.. Int { + var number = n + var answer = 0 + while number > 0 { + if number & 1 == 1 { + answer += 1 + } + number = number >> 1 + } + return answer + } +} + diff --git a/valid-palindrome/delight010.swift b/valid-palindrome/delight010.swift new file mode 100644 index 000000000..e68c551c4 --- /dev/null +++ b/valid-palindrome/delight010.swift @@ -0,0 +1,29 @@ +class Solution { + func isPalindrome(_ s: String) -> Bool { + let string = s.replacingOccurrences(of: " ", with: "").lowercased().map { $0 } + var leftIndex = string.startIndex + var rightIndex = string.endIndex - 1 + let letterRange: ClosedRange = 97...122 + let numberRange: ClosedRange = 48...57 + while leftIndex <= rightIndex { + guard let leftCharAscii = string[leftIndex].asciiValue else { break } + guard let rightCharAscii = string[rightIndex].asciiValue else { break } + if !letterRange.contains(leftCharAscii) && !numberRange.contains(leftCharAscii) { + leftIndex += 1 + continue + } + if !letterRange.contains(rightCharAscii) && !numberRange.contains(rightCharAscii) { + rightIndex -= 1 + continue + } + if leftCharAscii == rightCharAscii { + leftIndex += 1 + rightIndex -= 1 + } else { + return false + } + } + return true + } +} +