24點(diǎn)問題-Swift

數(shù)學(xué)歸納法
遞歸
回溯

class Solution {
    func judgePoint24(_ nums: [Int]) -> Bool {
        let result = nums.map { (item) -> Double in
            return Double(item)
        }
        return solve(nums: result)
    }
    
    func solve(nums: [Double]) -> Bool {
        guard nums.count != 0 else {
            return false
        }
        guard nums.count != 1 else {
            return abs(nums[0]) - 24.0 < 0.000001;
        }
        for (offset, element) in nums.enumerated() {
            for (offset2, element2) in nums.enumerated() {
                guard offset != offset2 else { continue }
                var nums2 = [Double]()
                for (offset3, element3) in nums.enumerated() where offset3 != offset && offset3 != offset2 {
                    nums2.append(element3)
                }
                for i in 0...3 {
                    if i<2 && offset2 > offset {
                        continue
                    }
                    switch i {
                    case 0:
                        nums2.append(element + element2)
                    case 1:
                        nums2.append(element * element2)
                    case 2:
                        nums2.append(element - element2)
                    case 3:
                        guard element2 != 0 else { continue }
                        nums2.append(element / element2)
                    default:
                        break
                    }
                    if solve(nums: nums2) {
                        print(nums2)
                        return true
                    }
                    nums2.removeLast()
                }
            }
        }
        return false
    }
}

var nums = [8, 1, 6, 6]
let solution = Solution.init()
let result = solution.judgePoint24(nums)
print(result)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • CHAPTER 1: INTRODUCTION 第一章:簡介 In this chapter, we discus...
    哈小奇閱讀 1,098評論 2 1
  • 分治算法 一、基本概念 在計(jì)算機(jī)科學(xué)中,分治法是一種很重要的算法。字面上的解釋是“分而治之”,就是把一個(gè)復(fù)雜的問題...
    Java資訊庫閱讀 9,876評論 0 14
  • 棧與遞歸 棧還有一個(gè)重要應(yīng)用是在程序設(shè)計(jì)語言中實(shí)現(xiàn)遞歸。一個(gè)直接調(diào)用自己或通過一系列的調(diào)用語句間接的調(diào)用自己的函數(shù)...
    Mr_Bluyee閱讀 3,649評論 0 1
  • 前言 幾個(gè)月之前就想寫這樣一篇文章分享給大家,由于自己有心而力不足,沒有把真正的學(xué)到的東西沉淀下來,所以一直在不斷...
    小鹿動(dòng)畫學(xué)編程閱讀 1,769評論 2 14
  • 經(jīng)驗(yàn)總結(jié):常用方法:空間換時(shí)間法:開辟新的數(shù)組去記錄信息多索引方法:多指針、標(biāo)記定位+遍歷、碰撞指針、滑動(dòng)窗口查表...
    HamletSunS閱讀 160評論 0 0

友情鏈接更多精彩內(nèi)容