2022-04-23:给定一个长度为4的整数数组 cards 。你有 4 张卡片,每张卡片上都包含一个范围在 [1,9] 的数字。您应该使用运算符 [‘+’, ‘-’, ‘*’, ‘/’] 和括号 ‘(’ 和 ‘)’ 将这些卡片上的数字排列成数学表达式,以获得值24。
你须遵守以下规则:
除法运算符 ‘/’ 表示实数除法,而不是整数除法。
例如, 4 /(1 - 2 / 3)= 4 /(1 / 3)= 12 。
每个运算都在两个数字之间。特别是,不能使用 “-” 作为一元运算符。
例如,如果 cards =[1,1,1,1] ,则表达式 “-1 -1 -1 -1” 是 不允许 的。
你不能把数字串在一起
例如,如果 cards =[1,2,1,2] ,则表达式 “12 + 12” 无效。
如果可以得到这样的表达式,其计算结果为 24 ,则返回 true ,否则返回 false 。
输入: cards = [4, 1, 8, 7]。
输出: true。
解释: (8-4) * (7-1) = 24。
力扣679. 24 点游戏。

答案2022-04-23:

自然智慧,暴力尝试。可利用原数组空间。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
cards := []int{1, 1, 3, 4}
ret := judgePoint24(cards)
fmt.Println(ret)
} func judgePoint24(cards []int) bool {
if len(cards) == 0 {
return false
}
n := len(cards)
arr := make([]*Number, n)
for i := 0; i < n; i++ {
arr[i] = NewNumber(cards[i], 1)
}
return judge(arr, len(cards))
} // arr中,有效的范围arr[0...size-1] ... 再往右,都无效了,不用看了!
func judge(arr []*Number, size int) bool {
if size == 1 {
return arr[0].numerator == 24 && arr[0].denominator == 1
}
for i := 0; i < size; i++ {
for j := i + 1; j < size; j++ {
inum := arr[i]
jnum := arr[j]
arr[j] = arr[size-1]
arr[i] = add(inum, jnum)
if judge(arr, size-1) {
return true
}
arr[i] = minus(inum, jnum)
if judge(arr, size-1) {
return true
}
arr[i] = minus(jnum, inum)
if judge(arr, size-1) {
return true
}
arr[i] = multiply(inum, jnum)
if judge(arr, size-1) {
return true
}
arr[i] = divide(inum, jnum)
if arr[i] != nil && judge(arr, size-1) {
return true
}
arr[i] = divide(jnum, inum)
if arr[i] != nil && judge(arr, size-1) {
return true
}
arr[i] = inum
arr[j] = jnum
}
}
return false
} type Number struct {
numerator int
denominator int
} func NewNumber(n, d int) *Number {
ans := new(Number)
ans.numerator = n
ans.denominator = d
return ans
} func add(a, b *Number) *Number {
return simple(a.numerator*b.denominator+b.numerator*a.denominator, a.denominator*b.denominator)
} func minus(a, b *Number) *Number {
return simple(a.numerator*b.denominator-b.numerator*a.denominator, a.denominator*b.denominator)
} func multiply(a, b *Number) *Number {
return simple(a.numerator*b.numerator, a.denominator*b.denominator)
} func divide(a, b *Number) *Number {
if b.numerator == 0 {
return nil
} else {
return simple(a.numerator*b.denominator, a.denominator*b.numerator)
}
} func simple(up, down int) *Number {
if up == 0 {
return NewNumber(0, 1)
}
gcd0 := abs(gcd(up, down))
return NewNumber(up/gcd0, down/gcd0)
} func abs(a int) int {
if a < 0 {
return -a
} else {
return a
}
} func gcd(a, b int) int {
if b == 0 {
return a
} else {
return gcd(b, a%b)
}
}

执行结果如下:


左神java代码

2022-04-23:给定一个长度为4的整数数组 cards 。你有 4 张卡片,每张卡片上都包含一个范围在 [1,9] 的数字。您应该使用运算符 [‘+‘, ‘-‘, ‘*‘, ‘/‘] 和括号 ‘的更多相关文章

  1. java—数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = input数组中,除了input[i] 之外的所有数的乘积,不用考虑溢出例如 input {2, 3, 4, 5} output: {60, 40, 30, 24}

    /** * 小米关于小米笔试题 数组乘积输入: 一个长度为n的整数数组input 输出: 一个长度为n的数组result,满足result[i] = * input数组中,除了input[i] 之外的 ...

  2. 给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。-----力扣

    给定长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积. 示例: 输入: [1 ...

  3. 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,

    转自:http://www.cnblogs.com/ranranblog/p/5845010.html 风口之下,猪都能飞.当今中国股市牛市,真可谓“错过等七年”. 给你一个回顾历史的机会,已知一支股 ...

  4. Day_09【常用API】扩展案例1_程序中使用一个长度为3的对象数组,存储用户的登录名和密码……

    需求说明:实现用户注册.登陆功能: 1.程序中使用一个长度为3的**对象数组**,存储用户的登录名和密码: 例如如下格式: 登录名 密码 生日 爱好 zhangsan 1111 1998-03-15 ...

  5. 【云计算】K8S DaemonSet 每个node上都运行一个pod

    Kubernetes容器集群中的日志系统集成实践 Kubernetes是原生的容器编排管理系统,对于负载均衡.服务发现.高可用.滚动升级.自动伸缩等容器云平台的功能要求有原生支持.今天我分享一下我们在 ...

  6. 产生一个长度为100的int数组,并向其中随机插入1-100,不能重复

    ]; ArrayList myList=new ArrayList(); Random rnd=new Random(); ) { ,); if(!myList.Contains(num)) myLi ...

  7. 在排序数组中查找元素的第一个和最后一个位置(给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。)

    示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: [3,4] 示例 2: 输入: nums = [5,7,7,8,8,10], target = 6 输出 ...

  8. C# 一个长度为100的int数组,插入1-100的随机数,不能重复,如何写

    int[] intArr = new int[100]; ArrayList myList = new ArrayList(); Random rnd = new Random(); while (m ...

  9. LeetCode 周赛 342(2023/04/23)容斥原理、计数排序、滑动窗口、子数组 GCB

    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,我是小彭. 前天刚举办 2023 年力扣杯个人 SOLO 赛,昨天周赛就出了一场 Easy - Ea ...

  10. byte和长度为8的boolean数组互相转换

    由于byte是一个8位字节 所以可以用它来存放数组为8的boolean数组,这些在通信协议会经常用到.这里给出一个java代码对其互相转换的. package com.udpdemo.test2; i ...

随机推荐

  1. 手把手教你基于luatos的4G(LTE Cat.1)模组接入华为云物联网平台

    摘要:本期文章采用了4G LTE Cat.1模块,编程语言用的是lua,实现对华为云物联网平台的设备通信与控制 本文分享自华为云社区<基于luatos的4G(LTE Cat.1)模组接入华为云物 ...

  2. Android笔记--如何在Android studio里面打开数据库

    具体操作 可参考这篇(更为详细): https://www.cnblogs.com/liuzijin/p/17029231.html 1.找到界面内的Device File Explorer 这里找可 ...

  3. 写Java程序有感

    最近我练习了Java的学生管理系统的程序代码,多亏了前段时间小学期的系统类练习,让我比较容易地就能够理解该题的题意,再根据我学到的相关的Java知识,就好像是一个套用公式的逻辑. 用到的相关知识: 1 ...

  4. 写.jsp项目有感

    本次练习了一个简单的登录界面 我觉得在写这种类型的界面的时候,需要将各个需求分开,就以这次的登录界面为例展开说说 1.登录界面 输入框的居中问题.登录按钮的跳转问题.验证码图片的随机问题.快速注册的跳 ...

  5. 干货 | BitSail Connector 开发详解系列一:Source

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 BitSail 是字节跳动自研的数据集成产品,支持多种异构数据源间的数据同步,并提供离线.实时.全量.增量场景下全 ...

  6. Why WebRTC|“浅入深出”的工作原理详解

    前言 近几年实时音视频通信应用呈现出了大爆发的趋势.在这些实时通信技术的背后,有一项不得不提的技术--WebRTC. 今年 1 月,WebRTC 被 W3C 和 IETF 发布为正式标准.据调研机构 ...

  7. CF916E 解题报告

    被这道题搞了一个晚上,还好搞出来了qwq 令人耳目一新的阅读体验 题目简述 翻译已经很简单了. 前置知识 DFS序,LCA,线段树,不需要标签中的树剖! DFS序更新信息及判断祖先 如果你还不知道DF ...

  8. 一次.net code中的placeholder导致的高cpu诊断

    背景 最近一位朋友找到我,让我帮看他们的一个aspnet core service无端cpu高的问题.从描述上看,这个service之前没有出现过cpu高的情况,最近也没有改过实际的什么code.很奇 ...

  9. 《golong入门教程📚》,从零开始入门❤️(建议收藏⭐️)

    Go语言学习笔记 本菜鸟的Go语言学习笔记,历时1个月,包含了Go语言大部分的基本语法(不敢说全部),学习期间参考了各种视频,阅读了各种文章,主要参考名单如下: 点击跳转到参考名单<( ̄︶ ̄)& ...

  10. salesforce零基础学习(一百一十六)workflow -> flow浅谈

    本篇参考: https://help.salesforce.com/s/articleView?id=sf.migrate_to_flow_tool_considerations_workflow.h ...