博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
293. Flip Game
阅读量:6670 次
发布时间:2019-06-25

本文共 2682 字,大约阅读时间需要 8 分钟。

题目:

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 twoconsecutive "++" 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 compute all possible states of the string after one valid move.

For example, given s = "++++", after one move, it may become one of the following states:

[  "--++",  "+--+",  "++--"]

 

If there is no valid move, return an empty list [].

链接: 

题解:

把"++"flip成"--"。把输入String转化为char[]就很好操作了。 其实用String也好操作,看到Stefan写了一个4行的,很精彩。

Time Complexity - O(n), Space Complexity - O(n)。

public class Solution {    public List
generatePossibleNextMoves(String s) { List
res = new ArrayList<>(); char[] arr = s.toCharArray(); for(int i = 1; i < s.length(); i++) { if(arr[i] == '+' && arr[i - 1] == '+') { arr[i] = '-'; arr[i - 1] = '-'; res.add(String.valueOf(arr)); arr[i] = '+'; arr[i - 1] = '+'; } } return res; }}

 

二刷:

题目的意思是,record all states after one valid move, 所以我们只需要flip一次。 先把String转换为数组,从1开始到最后,把两个连续的'+'变为'-',记录下这个结果,再backtracking把那两个'-'改回去,接着计算下面的结果。遍历完一次数组之后就可以了。

Java:

Time Complexity - O(n), Space Complexity - O(n)。

public class Solution {    public List
generatePossibleNextMoves(String s) { List
res = new ArrayList<>(); if (s == null || s.length() < 2) { return res; } char[] arr = s.toCharArray(); for (int i = 1; i < arr.length; i++) { if (arr[i] == '+' && arr[i - 1] == '+') { arr[i] = '-'; arr[i - 1] = '-'; res.add(String.valueOf(arr)); arr[i] = '+'; arr[i - 1] = '+'; } } return res; }}

 

三刷:

跟之前一样

Java:

public class Solution {    public List
generatePossibleNextMoves(String s) { List
res = new ArrayList<>(); if (s == null || s.length() < 2) return res; char[] str = s.toCharArray(); for (int i = 1; i < str.length; i++) { if (str[i] == '+' && str[i - 1] == '+') { str[i - 1] = '-'; str[i] = '-'; res.add(new String(str)); str[i - 1] = '+'; str[i] = '+'; } } return res; }}

 

 

 

Reference:

https://leetcode.com/discuss/64248/4-lines-in-java

https://leetcode.com/discuss/64335/simple-solution-in-java

转载地址:http://knlxo.baihongyu.com/

你可能感兴趣的文章
Codeforces Round #175 (Div. 2) C. Building Permutation(贪心)
查看>>
使用任务计划程序自动执行任务
查看>>
IDEA在代码上无错误提示,但是编译时出现error:非法字符
查看>>
失业的程序员(八):创业的要素
查看>>
使用Beetle.Express简单构建高吞吐的TCP&UDP应用
查看>>
CTime类小结1
查看>>
类型串php中null和false和0之间的区别
查看>>
类模式用Bridge模式重写了Libvirt框架
查看>>
Word2003和2007如何隐藏去掉回车符
查看>>
MD5鉴定文件是否相同
查看>>
Linux 定时运行脚本、命令
查看>>
Java Web 文件上传Demo <1>
查看>>
phpmyadmi 上传大文件
查看>>
每日英语:A Buying Guide to Air-Pollution Masks
查看>>
每日英语:As World's Kids Get Fatter, Doctors Turn To The Knife
查看>>
梅西百货公司[编辑]
查看>>
最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹
查看>>
有感于去哪儿的一道笔试题
查看>>
tabhost中setup()和setup(LocalActivityManager activityGroup)
查看>>
svn 文件状态标记含义
查看>>