interview-coin-lcci
硬币题目链接
思路dp即可
go解法1234567891011121314151617181920func waysToChange(n int) int { dp := make([]int, n+1) coins := []int{1, 5, 10, 25} for i := 0; i < 4; i++ { for j := 1; j <= n; j++ { if coins[i] < j { dp[j] += dp[j-coins[i]] } if coins[i] == j { dp[j]++ } dp[j] %= 1000000007 } } return dp[n]}
27-remove-element
移除数字题目链接
思路这题有点nt, 直接遍历数组就好了
go解法123456789101112func removeElement(nums []int, val int) int { sum := 0 for i := 0; i < len(nums); i++ { if nums[i] != val { nums[sum] = nums[i] sum++ } } return sum}
28-implement-strstr
需找第一次出现字符串的下表题目链接
解体思路直接用切片判断下就好了
go解法123456789101112131415func strStr(haystack string, needle string) int { n := len(needle) m := len(haystack) - n if n==0{ return 0 } for i := 0; i < m+1; i++ { if haystack[i:i+n] == needle { return i } } return -1}
78-subsets
子集题目链接
题目思路循环遍历,然后遇到对已经的到的子集加上但前数字即可
go解法1234567891011121314151617181920func subsets(nums []int) [][]int { var numSubset [][]int numSubset = append(numSubset, []int{}) for i := 0; i < len(nums); i++ { m := len(numSubset) for j := 0; j < m; j++ { tmp := make([]int, len(numSubset[j])) copy(tmp, numSubset[j]) tmp = append(tmp, nums[i]) // fmt.Println(tmp, nums[i], i) // fmt.Println(tmp, j) numSubset = append(numSubset, tmp) // fmt.Println(j) } & ...
14-longest-common-prefix
最大公共前缀题目链接
题目思路这题直接暴力算就好了,先找最少的单词数, 然后进行遍历所有字符串数组, 不同直接返回当前最长前缀,相同加上前缀
go解题思路12345678910111213141516171819202122232425func longestCommonPrefix(strs []string) string { str := "" m := len(strs) if m == 0 { return str } min := math.MaxInt32 for i := 0; i < m; i++ { if len(strs[i]) < min { min = len(strs[i]) // fmt.Println(min) } } for i := 0; i < min; i++ { for j := 0; j < m; j++ { if strs[j][i] != strs[0][i] { // ...
8-string-to-integer-atoi
字符串转数字题目链接
解体思路这题先去空白符号, 然后在判断第一个字符是那个符号或者数字,是负数符号flag=-1, 然后在对字符串进行遍历,如果遇到非数字就退出,如果数字超过int32[-2^32, 2^32-1]的范围退出, 然后返回flag * 数字和, 这题的坑有+号出现
go解法123456789101112131415161718192021222324252627282930313233func myAtoi(str string) int { var num int flag:=1 str = strings.TrimSpace(str) if len(str) == 0 { return num } if str[0] == '-' { flag = -1 } else if str[0] == '+' { flag = 1 } else if str[0] > '9' || str[0] < '0 ...
200-numbers-of-islands
岛屿数量题目链接
解体思路这题遇到了岛屿然后对此为止进行周围扫描把周围的1变成0, 题目有个坑,他可能会传个空数组回来
go解题思路123456789101112131415161718192021222324252627282930313233343536func dfs(grid *[][]byte, dx, dy int) { if dx < 0 || dy < 0 || dx >= m || dy >= n { return } if (*grid)[dx][dy] == '0' { return } (*grid)[dx][dy] = '0' for k := 0; k < 4; k++ { dfs(grid, dx+pos[k][0], dy+pos[k][1]) }}var m, n intvar pos = [][]int{{0, 1}, {1, 0}, { ...
13-roman-to-integer
罗马数字转数字题目链接
解题思路倒序遍历判断下就好了,只要前面的数比后面的小,就减去
go代码1234567891011121314151617181920212223func romanToInt(s string) int { num := 0 value := map[byte]int{ 'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000, } num = value[s[len(s)-1]] for i := len(s) - 2; i >= 0; i-- { if value[s[i]] < value[s[i+1]] { num -= value[s[i]] } else { num += value[s[i]] } } retur ...
11-container-with-most-water
存水最多的容器题目链接
解体思路这题想法式我们给两个索引先分别指向开头和末尾, 再去计算两个索引间的最大的存水量与最大存水量判断, 然后再去判断下索引位置的高度,低的那一面往对方靠近,以此类推直到两方索引相等
go解法123456789101112131415161718192021222324func maxArea(height []int) int { secondIndex, firstIndex := len(height)-1, 0 maxValue := 0 for { if secondIndex <= firstIndex { break } var num int lens := secondIndex - firstIndex if height[secondIndex] > height[firstIndex] { num = height[firstIndex] firstIndex++ } else { num = height[secondInd ...
55-jump-game
跳跃游戏题目链接
题目思路我们从倒数第二个数开始倒序遍历, 先设置初始要走的步数为n=1,当我们可以走的步数小于n的时候n+1, 当步数够用时候我们再把n还原到1,最后再在0点判断他是否步数为1
go解法方法一12345678910111213141516func canJump(nums []int) bool { n := 1 for i := len(nums) - 2; i >= 0; i-- { if nums[i] >= n { n = 1 } else { n++ } if i == 0 && n != 1 { return false } } return true}
方法二12345678910111213141516171819202122func canJump(nums []int) bool { if len(nums) == 1 { return true } ...