算法

159 阅读1分钟

配对算法

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。

输入:s = "()" 输出:true 

示例 2: 输入:s = "()[]{}" 输出:true 

示例 3: 输入:s = "(]" 输出:false 

示例 4: 输入:s = "([)]" 输出:false

实例5:输入:s = "{[]}" 输出:true

private fun test(param: String): Boolean {
        var result = true
        val split = param.toCharArray().map { it + "" }
        for (i in split.indices) {
            if (split[i] == "(") {
                linkList.addLast(")")
            } else if (split[i] == "[") {
                linkList.addLast("]")
            } else if (split[i] == "{") {
                linkList.addLast("}")
            } else {
                if (linkList.size > 0) {
                    val remoLast = linkList.removeLast()
                    if (remoLast != split[i]) {
                        result = false
                        break
                    }
                } else {
                    result = false
                    break
                }
            }
        }
        if (linkList.size != 0) {
            result = false
        }
        return result
    }

动态规划(斐波那契问题

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 + 1 阶 2. 2 阶 示例 2: 输入:n = 3 输出:3 解释:有三种方法可以爬到楼顶。

class Solution {    fun climbStairs(n: Int): Int {          if (n == 1 || n == 2){            return n        }        var begin1 = 1        var begin2 = 2        var result = 0;        for (temp in 3..n) {            result = begin1 + begin2            begin1 = begin2            begin2 = result        }        return result    }}