Correct Path解题方法
来源:互联网 发布:seo外包顾问服务 编辑:程序博客网 时间:2024/05/16 10:56
在CoderByte上做题练习Swift编程能力, 有道算法题有点意思, 题目叫“Correct Path”。
分析: 题目是5*5的矩阵, 起点是(0,0), 终点是(4,4), 总共25个点。 如果按照二维数组理解, 终点值应该等于24。向左等价于-1, 向右等价于+1,向上等价于-5,向右等价于+5。因为是5*5的矩阵,移动时要判断边界条件。 即:从起点开始向右移动4次,向下移动4次才能到达终点; 一左一右或者一上一下在逻辑上相当于没动(PS:不改变4次的门限值)。
解题方法:
最先想到的是递归, 简单粗暴且性能很差; 正在想其它算法中......
//添加字符替换功能extension String { func replaceFirst(source: String, dest: String) -> String { let index = self.index(of: "?") if index == nil { return self } var result = "" for i in 0..<self.count { if i == index!.encodedOffset { result.append(dest) } else { result.append((self as NSString).substring(with: NSMakeRange(i, 1))) } } return result }}func isValidPath(str: String) -> Bool { var stepR = 4 var stepD = 4 for character in str { if character == "l" { if stepR < 4 { stepR += 1 } else { return false } } if character == "r" { if stepR > 0 { stepR -= 1 } else { return false } } if character == "d" { if stepD > 0 { stepD -= 1 } else { return false } } if character == "u" { if stepD < 4 { stepD += 1 } else { return false } } } return stepR==0 && stepD==0}func CorrectPath(_ str: String) -> String { // code goes here // Note: feel free to modify the return type of this function if !str.contains("?") { return str } for character in str { if character == "?" { var paths: [String] = [] paths.append(CorrectPath(str.replaceFirst(source: "?", dest: "d"))) paths.append(CorrectPath(str.replaceFirst(source: "?", dest: "u"))) paths.append(CorrectPath(str.replaceFirst(source: "?", dest: "l"))) paths.append(CorrectPath(str.replaceFirst(source: "?", dest: "r"))) for p in paths { if isValidPath(str: p) { return p } } } } return "" }let path = CorrectPath("???rrurdr?")print(path)
阅读全文
0 0
- Correct Path解题方法
- POJ_3126Prime Path解题报告
- leetCode 64.Minimum Path Sum (最短路) 解题思路和方法
- leetCode 71.Simplify Path(化简路径) 解题思路和方法
- leetCode 112.Path Sum (路径和) 解题思路和方法
- leetcode 113. Path Sum II (路径和) 解题思路和方法
- [LeetCode]Path Sum,解题报告
- 【LeetCode】Simplify Path 解题报告
- 【LeetCode】Simplify Path 解题报告
- [LeetCode] Simplify Path 解题报告
- 【LeetCode】Path Sum 解题报告
- Path 方法
- Cannot find Velocity template for URL : Did you specify the correct resource loader path?
- configure: error: Cannot find libpq-fe.h. Please specify correct PostgreSQL installation path
- POJ-3126 Prime Path 解题报告
- UVALive 6044 Unique Path 解题报告
- [LeetCode]Minimum Path Sum,解题报告
- hdu 1973 Prime Path 解题报告
- [arc068f]Solitaire
- [转载]文献关键词共现矩阵python实现
- 1175级数求和问题
- 9.1 构造器与垃圾收集器
- 细讲android获取流量使用情况,以及解决调用流量接口不准问题(非TrafficStats,而是NetworkStatsHistory)
- Correct Path解题方法
- Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决
- java.sql.SQLException: ORA-28000: the account is locked
- Spring MVC学习记录(一)——网站基础知识(1)
- 哈希表处理冲突的办法
- linux系统安装mysql
- IOS配置工程Build号并自动+1
- selenium中isEnable()、isDisplayed()和isSelected()
- 最近学习希尔排序,发现了新的好玩的!我看网上都是用插入实现的我试着用冒泡实现