LeetCode 294. Flip Game II

来源:互联网 发布:总裁高级研修班知乎 编辑:程序博客网 时间:2024/06/07 12:04

Problem Description:

You are playing the following Flip Game with your friend: Given a string that contains only these two characters: + and -, you and your friend take turns to flip two consecutive “++” into “–”. The game ends when a person can no longer make a move and therefore the other person will be the winner.

Write a function to determine if the starting player can guarantee a win.

For example, given s = “++++”, return true. The starting player can guarantee a win by flipping the middle “++” to become “+–+”.

Follow up:
Derive your algorithm’s runtime complexity.

思路:
1. 对于n长的string,如何判断是否能win呢?简单直接方法是,遍历backtracking,复杂度:

T(N) = (N-2) * T(N-2) = (N-2) * (N-4) * T(N-4) … = (N-2) * (N-4) *
(N-6) * … ~ O(N!!)

bool canWin(string&s) {    for(int i=0;i<s.size()-2;i++){        if(s[i]=='+'&&s[i+1]=='+'){            s[i]='-';s[i+1]='-';            bool win=canWin(s);            s[i]='+';s[i+1]='+';            if(!win) return true;        }    }    return false;}
  1. 除了简单粗暴的方法,还有利用game theory的方法,参考https://discuss.leetcode.com/topic/27282/theory-matters-from-backtracking-128ms-to-dp-0ms 和 http://www.1point3acres.com/bbs/thread-137953-1-1.html
0 0
原创粉丝点击