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
}