leetcode刷题之路7,每一天一题

作者: 编程技术  发布:2019-09-20

付给叁个 32 位的有标记整数,你供给将那么些大背头中每人上的数字实行反转。

记录自个儿刷过的leetCode,作为菜鸡确定是从简单开端啦。附上Github地址——LeetCodeRecord

图片 1

1.两数之和

给定一个卡尺头数组和多少个对象值,搜索数组卯月为指标值的八个数。你能够借使每一个输入只对应一种答案,且一样的成分不能够被再一次利用。

示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以再次来到 [0, 1]

func twoSum(_ nums: [Int], _ target: Int) -> [Int] { for i in 0..<nums.count{ for j in i+1..<nums.count{ if (target - nums[i] == nums[j]) { return [i, j] } } } return [Int]() }

示例 1:
输入: 123
输出: 321

7.反转整数

给定三个 32 位有号子整数,将整数中的数字实行反转。

示例 1:输入: 123输出: 321

示例 2:输入: -123输出: -321

示例 3:输入: 120输出: 21

func reverse -> Int { var x = x var rev = 0 while x != 0 { let p = x % 10 x /= 10 if (rev > Int32.max/10 || (rev == Int32.max/10 && p > 7)){ return 0 } if (rev < Int32.min/10 || (rev == Int32.min/10 && p < -8)){ return 0 } rev = rev * 10 + p } return rev }

示例 2:
输入: -123
输出: -321

9.回文数

剖断叁个整数是不是是回文数。回文数是指正序和倒序读都以一模一样的卡尺头。

示例 1:输入: 121输出: true

亲自去做 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。由此它不是三个回文数。

事必躬亲 3:输入: 10输出: false解释: 从右向左读, 为 01 。由此它不是二个回文数。

func isPalindrome -> Bool { if p < 0 || (p % 10 == 0 && p != 0){ return false } var x = p var rev = 0 while x > rev { rev = rev * 10 + x % 10 x /= 10 } return x == rev || x == rev/10 }

示例 3:
输入: 120
输出: 21

13.休斯敦数字转整数
 func romanToInt(_ s: String) -> Int { var res = 0 var dic:[String:Int] = ["I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000] var arr = [String]() for str in s { arr.append(String.init } for i in 0..<arr.count { /// 肯定有值,强转就好 let val = dic[arr[i]]! if i == arr.count - 1 || (dic[arr[i+1]]! <= dic[arr[i]]!){ res += val }else{ res -= val } } return res }
#include <iostream>using namespace std;int reverse(int x) {    long ans=0;//这里用long防止溢出    while(x!=0)    {        ans=ans*10+(x%10);        x/=10;    }    return (ans > INT_MAX || ans < INT_MIN) ? 0 : (int)ans;}int main() {    int a=1534236469;    int ans=reverse;    std::cout <<ans << std::endl;    return 0;}
14.最长公共前缀

编辑三个函数来找出字符串数组中的最长公共前缀。

若果不设有公共前缀,重回空字符串 ""

示例 1:输入: ["flower","flow","flight"]输出: "fl"

示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不设有公共前缀。

func longestCommonPrefix(_ strs: [String]) -> String { if strs.count == 0 { return "" } var prefix = strs[0] for i in 0..<strs.count { while !strs[i].hasPrefix{ prefix.removeLast() if prefix.isEmpty { return "" } } } return prefix }
20.有效的括号

给定一个只囊括 '','{','}','[',']' 的字符串,推断字符串是不是管用。有效字符串需满意:左括号必须用同样等级次序的右括号闭合。左括号必得以精确的各种闭合。注意空字符串可被以为是行得通字符串。

示例 1:输入: "()"输出: true

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

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

示例 4:输入: "]"输出: false

示例 5:输入: "{[]}"输出: true

func isValid(_ s: String) -> Bool { var arr = Array<String>() for i in s{ if i == "(" || i == "[" || i == "{" { arr.append) }else{ if arr.count == 0{ return false } let f = arr.last! if i == ")"{ if f != "("{ return false } } if i == "]"{ if f != "["{ return false } } if i == "}"{ if f != "{"{ return false } } arr.removeLast() } } return arr.count == 0 }
21.集合八个不变链表

将四个静止链表合併为三个新的平稳链表并再次回到。新链表是透过拼接给定的三个链表的持有节点组成的。

示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4

递归
func mergeTwoLists(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? { guard let l1 = l1 else { return l2 } guard let l2 = l2 else { return l1 } if l1.val >= l2.val { l2.next = mergeTwoLists(l1, l2.next) return l2 }else{ l1.next = mergeTwoLists(l1.next, l2) return l1 } }
迭代
func mergeTwoLists2(_ l1: ListNode?, _ l2: ListNode?) -> ListNode? { var l1 = l1 var l2 = l2 if l1 == nil { return l2 } if l2 == nil { return l1 } let res:ListNode = ListNode.init var cur:ListNode? = res while l1 != nil && l2 != nil { /* 输出结果要求从小到大排序 如果l1的值小,把l1加入新的链表 并把l1的链表头去掉,再循环 */ if l1!.val <= l2!.val { cur?.next = l1 l1 = l1?.next }else{ cur?.next = l2 l2 = l2?.next } /* cur拷贝了res的next属性地址,所以每次修改cur.nextd值,res.next也会改变 同时cur = cur?.next,所以执行cur = cur?.next时 cur的指针指向了下一个 */ cur = cur?.next } cur?.next = l1 == nil ? l2 : l1 return res.next }

本文由贝博体育app发布于编程技术,转载请注明出处:leetcode刷题之路7,每一天一题

关键词:

上一篇:没有了
下一篇:表决单调性