funcisHappy(n int)bool{ left ,right := n , n for{ left = GetSum(left) right = GetSum(left) right =GetSum(right) if left ==right { break } } return right == 1 }
funcGetSum(n int)int { sum := 0 for n>0 { sum = (n%10)*(n%10) n = n/10 } return sum }
funcbitSquareSum(n int)int { sum := 0 for n > 0 { bit := n % 10 sum += bit * bit n = n / 10 } return sum } funcisHappy(n int)bool { slow, fast := n, n for { slow = bitSquareSum(slow) fast = bitSquareSum(fast) fast = bitSquareSum(fast) if slow == fast { break } } return slow == 1 }
funccanConstruct(ransomNote string, magazine string)bool { m := make ([]int ,26) for _,v1 := range magazine{ m[v1-'a']++ } for _,v2 := range ransomNote{ if m[v2-'a']!=0{ m[v2-'a'] -- }else { returnfalse } } returntrue }
这个就是传统的思路
如果出现字符,就把map转化为 []int,更加高效
三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请
// 我自己写 的错误代码,反正通不过,纪念一下 // 这个解法会导致 重复并且这个数组是乱序的llll type array struct { stat int f int s int } functhreeSum(nums []int) [][]int { hash := make(map[int]array) for i, value1 := range nums { for j, value2 := range nums { if i == j { continue } hash[value1+value2] = array{ stat: 2, f: i, s: j, } } } var slice [][]int for i, value := range nums { if val, ok := hash[-value]; ok && val.stat == 2 { if val.f != i && val.s != i { slice = append(slice, []int{nums[val.f], nums[val.s], nums[i]}) } } } return slice }
// 正确的代码 functhreeSum(nums []int) [][]int { var result [][]int sort.Ints(nums) for i := 0; i < len(nums)-2; i++ { if i > 0 && nums[i] == nums[i-1] { continue// skip same result } left, right := i+1, len(nums)-1 for left < right { sum := nums[i] + nums[left] + nums[right] if sum < 0 { left++ } elseif sum > 0 { right-- } else { result = append(result, []int{nums[i], nums[left], nums[right]}) for left < right && nums[left] == nums[left+1] { left++ // skip same result } for left < right && nums[right] == nums[right-1] { right-- // skip same result } left++ right-- } } } return result } // 个人觉得这道题不需要什么解释 // 看到具体代码思路跟下去,就能看懂 --- 双指针