LeetCode 新手村刷题(GO)
P1480 一维数组的动态和
题目描述
给你一个数组 nums 。数组「动态和」的计算公式为:runningSum[i] = sum(nums[0]…nums[i]) 。请返回
nums 的动态和。
示例 1:
输入:nums = [1,2,3,4]
输出:[1,3,6,10]
解释:动态和计算过程为 [1, 1+2, 1+2+3, 1+2+3+4] 。
示例 2:
输入:nums = [1,1,1,1,1]
输出:[1,2,3,4,5]
解释:动态和计算过程为 [1, 1+1, 1+1+1, 1+1+1+1, 1+1+1+1+1] 。
示例 3:
输入:nums = [3,1,2,10,1]
输出:[3,4,6,16,17]
代码
func runningSum(nums []int) []int {
for i :=1;i<len(nums);i++{
nums[i]=nums[i-1]+nums[i];
}
return nums;
}
P1342 将数字变成 0 的操作次数
题目描述
给你一个非负整数 num ,请你返回将它变成 0 所需要的步数。 如果当前数字是偶数,你需要把它除以 2 ;否则,减去 1 。
示例 1:
输入:num = 14
输出:6
解释:
步骤 1) 14 是偶数,除以 2 得到 7 。
步骤 2) 7 是奇数,减 1 得到 6 。
步骤 3) 6 是偶数,除以 2 得到 3 。
步骤 4) 3 是奇数,减 1 得到 2 。
步骤 5) 2 是偶数,除以 2 得到 1 。
步骤 6) 1 是奇数,减 1 得到 0 。
示例 2:
输入:num = 8
输出:4
解释:
步骤 1) 8 是偶数,除以 2 得到 4 。
步骤 2) 4 是偶数,除以 2 得到 2 。
步骤 3) 2 是偶数,除以 2 得到 1 。
步骤 4) 1 是奇数,减 1 得到 0 。
示例 3:
输入:num = 123
输出:12
代码
func numberOfSteps(num int) int {
var count int = 0
for ; ; {
if(num ==0 ){
break
}
if(num%2!=0){
num=num-1;
count++;
}else{
num=num/2;
count++;
}
}
return count;
}
P1672. 最富有客户的资产总量
题目描述
给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。
客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。
示例 1:
输入:accounts = [[1,2,3],[3,2,1]]
输出:6
解释:
第 1 位客户的资产总量 = 1 + 2 + 3 = 6
第 2 位客户的资产总量 = 3 + 2 + 1 = 6
两位客户都是最富有的,资产总量都是 6 ,所以返回 6 。
示例 2:
输入:accounts = [[1,5],[7,3],[3,5]]
输出:10
解释:
第 1 位客户的资产总量 = 6
第 2 位客户的资产总量 = 10
第 3 位客户的资产总量 = 8
第 2 位客户是最富有的,资产总量是 10
示例 3:
输入:accounts = [[2,8,7],[7,1,3],[1,9,5]]
输出:17
代码
func maximumWealth(accounts [][]int) int {
var maxx int = 0
var sum int
for _,v1:=range accounts {
sum=0
for _,v2:= range v1{
sum+=v2
}
if maxx<sum{
maxx=sum
}
}
return maxx
}
412. Fizz Buzz
题目描述
给你一个整数 n ,找出从 1 到 n 各个整数的 Fizz Buzz 表示,并用字符串数组 answer(下标从 1
开始)返回结果,其中:answer[i] == “FizzBuzz” 如果 i 同时是 3 和 5 的倍数。 answer[i] == “Fizz” 如果 i 是
3 的倍数。 answer[i] == “Buzz” 如果 i 是 5 的倍数。 answer[i] == i
(以字符串形式)如果上述条件全不满足。示例 1:
输入:n = 3 输出:[“1”,“2”,“Fizz”] 示例 2:
输入:n = 5 输出:[“1”,“2”,“Fizz”,“4”,“Buzz”] 示例 3:
输入:n = 15
输出:[“1”,“2”,“Fizz”,“4”,“Buzz”,“Fizz”,“7”,“8”,“Fizz”,“Buzz”,“11”,“Fizz”,“13”,“14”,“FizzBuzz”]
代码
func fizzBuzz(n int) []string {
var arr []string
var va string
for i:=1;i<=n;i++{
if i%3==0&&i%5==0{
va="FizzBuzz"
}else if i%3==0{
va="Fizz"
}else if i%5==0{
va="Buzz"
}else {
va=strconv.Itoa(i)
}
arr=append(arr,va)
}
return arr
}
P383. 赎金信
题目描述 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
示例 1:
输入:ransomNote = “a”, magazine = “b” 输出:false
示例 2:输入:ransomNote = “aa”, magazine = “ab” 输出:false
示例 3:输入:ransomNote = “aa”, magazine = “aab” 输出:true
代码
func canConstruct(ransomNote string, magazine string) bool {
var nums [26]int
for i := 0; i < 26; i++ {
nums[i] = 0
}
fmt.Println("sssss")
for _,i :=range magazine {
nums[i-'a']++
}
for _,i:=range ransomNote{
nums[i-'a']--
}
for i := 0; i < 26; i++ {
if nums[i] < 0 {
return false
}
}
return true
}
P876. 链表的中间结点
题目描述
给你单链表的头结点 head ,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
示例 1:
输入:head = [1,2,3,4,5] 输出:[3,4,5] 解释:链表只有一个中间结点,值为 3 。 示例 2:
输入:head = [1,2,3,4,5,6] 输出:[4,5,6] 解释:该链表有两个中间结点,值分别为 3 和 4 ,返回第二个结点。
代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func middleNode(head *ListNode) *ListNode {
lang,fas:=0,head
for fas!=nil{
lang++
fas=fas.Next
}
lang =lang /2;
for i:=0;i<lang;i++{
head=head.Next
}
return head
}