5.24 奇安信笔试-Golang

24届第一次参加笔试,两题都没做出来

一、拓扑图求路径数

输入一个二维数组表示图,输出从起始点到终点可能的路径数

package main

import "fmt"

var res int

func main() {
	var nodes [][]int
	nodes = append(nodes, []int{1, 2, 3})
	nodes = append(nodes, []int{3})
	nodes = append(nodes, []int{3})
	nodes = append(nodes, []int{4})
	nodes = append(nodes, []int{})
	dfs(0, nodes)
	fmt.Println(res)
}

func dfs(start int, nodes [][]int) {
	if start == len(nodes)-1 {
		res++
		return
	}
	for _, v := range nodes[start] {
		dfs(v, nodes)
	}
}

二、九键手机

输入是只包含1-9的字符串,输出是对应按键可能的组合

例:

输入:2

输出:['d', 'e', 'f']

输入:22

输出:['dd', 'de', 'df', 'ed', 'ee', 'ef', 'fd', 'fe', 'ff']

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var s string
var res []string
var m map[int]string

func backTrack(nums []int, index int) {
	if index == len(nums) {
		res = append(res, s)
		return
	}
	letters := m[nums[index]]
	for i := 0; i < len(letters); i++ {
		s += string(letters[i])
		backTrack(nums, index+1)
		s = s[:len(s)-1]
	}
}

func main() {
	m = make(map[int]string, 0)
	m[1] = "abc"
	m[2] = "def"
	m[3] = "ghi"
	m[4] = "jkl"
	m[5] = "mno"
	m[6] = "pqr"
	m[7] = "stu"
	m[8] = "vwx"
	m[9] = "yz"

	scanner := bufio.NewScanner(os.Stdin)
	for scanner.Scan() {
		nums := make([]int, 0)
		res = make([]string, 0)
		s = ""
		data := strings.Split(scanner.Text(), "")
		for i := 0; i < len(data); i++ {
			if num, err := strconv.Atoi(data[i]); err == nil {
				nums = append(nums, num)
			}
		}
		backTrack(nums, 0)
		fmt.Printf("%v\n", res)

	}
}

#笔试##奇安信#
全部评论
讲道理这两题不是都一个思路,用回溯妙解😂
1 回复 分享
发布于 2023-05-25 00:25 江苏
第一题直接深搜就可以,我算法做出来了,但是前面选择题都不会做
点赞 回复 分享
发布于 2023-05-25 00:24 浙江

相关推荐

__Offer__:认识的室友啥也不回细节,线下面联想大模型一次通关我给我干不回了
点赞 评论 收藏
分享
09-18 20:41
阿里巴巴_后端
要个offer怎么这...:哈哈哈哈哈哈,我也拿了0x10000000个offer,秋招温啦啦啦,好开心
我的秋招日记
点赞 评论 收藏
分享
评论
4
7
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务