LeetCode 299. Bulls and Cows,Swift Code

时间:2016-07-11 05:45:03

标签: swift

OJ页面是:299. Bulls and Cows, Swift Code

我的Swift代码是:

func getHint(secret: String, _ guess: String) -> String
{
    let count = secret.characters.count
    var ans = ""

    var countA = 0
    var countB = 0

    var numsCount = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

    for i in 0 ..< count
    {
        let curSecretIndex = secret.startIndex.advancedBy(i)
        let curGuessIndex = guess.startIndex.advancedBy(i)

        if secret[curSecretIndex] == guess[curGuessIndex]
        {
            countA += 1
        }
        else
        {
            let curSecretNum = Int(String(secret[curSecretIndex]))!
            let curGuessNum = Int(String(guess[curGuessIndex]))!
            if numsCount[curSecretNum] > 0
            {
                countB += 1
            }
            if numsCount[curGuessNum] < 0
            {
                countB += 1
            }

            numsCount[curSecretNum] -= 1
            numsCount[curGuessNum] += 1
        }
    }

    ans = String(countA) + "A" + String(countB) + "B"
    return ans
}

结果超时限制&#39;在运行案例时:

"6342125515600209181500897947396070342608717883958593622428977819470145518981094482423670643602640743135109789842055897996388630146186752661167826378847934464616412304716111808304498782005822162883686211337836911445498225004774354586168838560300965168000411392051373086314099651372076489284613220040070817961103856849197569739439674339914883676284322398392068700339678002599137137279304395401279115346633764844174685348142841166612675248803215000249557405129671377750613405565000541484366826871257668988459106913268432182614110919996681746630972155917317871065083728781479655332598828637865325616648485574880796687189161689539391392553041342138974604486863793131125744568750189486989526831390549186801009323526430712299903383659261758477604285513561656265905238724724774327396452598472436892619082685728038313372432807929513713314602774582152430611189205157910570001968051407417723280898588867721259234562110839321097595400391525102339288526258798825449826942020614695348904788907661932993430488593552",    "2029388157754123013579930824032835962698439709529058700566544658243563588105123607416485416240508396898633255420749620114578170997813662130792145648053315140036623409978307287859342924657549449161362779317296010762442132229389529024391729227555488965589257218766928737602934082420388840064521623805135789781907460246852282793026912370042044884703394961008247101686942091465646505425818246546319109188403876239911011831539311377016115552962442767907020896812732576449580620680669604714802174904961265522985701150408238410077557827782193833638029934745703495039208558090425795228240968930462177363142995202879750991368837565022531005343218914976811148294727154364844319794156224312278949985742616475018653587238917107571280831446981869075410523704462504535667036707669945712843129399060874345018414837070546836481691874559666339572723901027743847187340764130312322743860946054990407323560232897592869469337005471407593834874319157599015450827399558773751402417232829362967857998884017081049757447739946"

如何改善表现?

有人帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:0)

不确定你是如何得到'超出时间限制'的。在游乐场试试这个:

  import Foundation

func bowsAndBulls (guess: String, secret: String) -> String {

    if guess.characters.count != secret.characters.count {
        return "ERROR"
    }

    //use counter variables works too

    var countA = [String]()
    var countB = [String]()

    for i in 0..<guess.characters.count {
        let start = guess.startIndex.advancedBy(i)
        let end = guess.startIndex.advancedBy(i+1)
        let single = guess.substringWithRange(start..<end)

        if secret.containsString(single) {
            if secret.substringWithRange(start..<end) == single {
                countA.append(single)
            }else{
                countB.append(single)
            }
        }

    }

    return String(countA.count) + "A" + String(countB.count) + "B"
}

print(bowsAndBulls("5234", secret: "5346"))