华为社会招聘-软件特战队机考题(B)
1. 有效的ip组合数量。 输入 [0-9]的一串数字, 长度最长为10, 可重复使用。 求总共能组成多少个有效IP:
比如 输入"23", 每一个IP段 可以使用10个组成的数字: 2, 22,222, 223, 232, 233, 3, 32, 33, 33, 23.
所以总的有效的IP总数为: 10 * 10 * 10 * 10.
这个题就是排列组合, 和39很像。
2. 给你输入[]string数组的linux文件path, 让你打印成 Tree . 有缩进那种。 输入的文件路径 可能会有相同的上层目录, 所以要做合并。
两个题难度都不大。
比如 输入"23", 每一个IP段 可以使用10个组成的数字: 2, 22,222, 223, 232, 233, 3, 32, 33, 33, 23.
所以总的有效的IP总数为: 10 * 10 * 10 * 10.
这个题就是排列组合, 和39很像。
2. 给你输入[]string数组的linux文件path, 让你打印成 Tree . 有缩进那种。 输入的文件路径 可能会有相同的上层目录, 所以要做合并。
两个题难度都不大。
全部评论
这是 od 吗?hr 和我说正式
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strings"
)
func main() {
snr := bufio.NewScanner(os.Stdin)
snr.Scan()
str := snr.Text()
str = strings.Trim(str, " ")
nums := []int{}
for i := 0; i < len(str); i++ {
nums = append(nums, int(str[i]-'0'))
}
sort.Ints(nums)
cnt := helper(nums)
//fmt.Println(cnt)
sum := cnt * cnt * cnt * cnt
fmt.Println(sum)
}
func helper(nums []int) int {
ans := 0
row := 0
var dfs func(start int)
dfs = func(start int) {
ans++
fmt.Println(row)
//fmt.Println("row:", row, ans)
for j := start; j < len(nums); j++ {
if row*10+nums[j] > 255 {
continue
}
if row == 0 && nums[j] == 0 {
continue
}
row = row*10 + nums[j]
dfs(start)
row = row / 10
}
}
dfs(0)
//fmt.Println("nums:", nums)
if nums[0] == 0 {
return ans
}
return ans - 1
}
相关推荐

点赞 评论 收藏
分享
02-24 20:45
天津大学 自动化 点赞 评论 收藏
分享