添加运算符go语言

package main

import (
	"fmt"
	"regexp"
	"strconv"
)

func main() {
	str := "202"
	var target int64 = 2
	if !isNum(str) {
		return
	}
	addOperators(str, target)
}

func addOperators(str string, target int64) {
	res := []string{}
	backtrack(str, "", target, 0, 0, 0, &res)
	fmt.Println(res)
}
func backtrack(str, path string, target, sum, start, pre int64, res *[]string) {
	strLen := int64(len(str))
	if start == strLen && sum == target {
		*res = append(*res, path)
		return
	} else if start >= strLen {
		return
	} else {
		for i := start; i < strLen; i++ {
			if string(str[start]) == "0" && i > start {
				break
			}
			curStr := string(str[start : i+1])
			cur, _ := strconv.ParseInt(curStr, 10, 64)
			if start == 0 {
				backtrack(str, path+curStr, target, sum+cur, i+1, cur, res)
			} else {
				//做加法 +cur
				backtrack(str, path+"+"+curStr, target, sum+cur, i+1, cur, res)

				//做减法 -cur
				backtrack(str, path+"-"+curStr, target, sum-cur, i+1, -cur, res)

				//做乘法 *cur
				backtrack(str, path+"*"+curStr, target, sum-pre+pre*cur, i+1, pre*cur, res)

				//做除法 /cur
				if cur == 0 {
					break
				}
				backtrack(str, path+"/"+curStr, target, sum-pre+pre/cur, i+1, pre/cur, res)
			}
		}
	}
}
func isNum(str string) bool {
	pattern := "^\\d+$"
	result, _ := regexp.MatchString(pattern, str)
	return result
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值