华为社会招聘-软件特战队机考题(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
}
相关推荐
不卷了:去字节就等着卷似吧,感觉这边都只看title,不考虑工作强度的
 点赞 评论 收藏   
分享
  点赞 评论 收藏   
分享
 

