求方程的解 Solve the Equation

为什么80%的码农都做不了架构师?>>>   hot3.png

问题:

Solve a given equation and return the value of x in the form of string "x=#value". The equation contains only '+', '-' operation, the variable x and its coefficient.

If there is no solution for the equation, return "No solution".

If there are infinite solutions for the equation, return "Infinite solutions".

If there is exactly one solution for the equation, we ensure that the value of x is an integer.

Example 1:

Input: "x+5-3+x=6+x-2"
Output: "x=2"

Example 2:

Input: "x=x"
Output: "Infinite solutions"

Example 3:

Input: "2x=x"
Output: "x=0"

Example 4:

Input: "2x+3x-6x=x+2"
Output: "x=-1"

Example 5:

Input: "x=x+2"
Output: "No solution"

解决:

① 解方程。难点在于处理字符串,如何将x的系数合并起来,将常数合并起来,化简成ax=b的形式来求解。

例:
x + 5 -2x = 6-3x;
leftPart:tokens= {x,+ 5,-2x}; 系数为x = 1-2 = -1; 常数= 5;
rightPart:tokens = {6,-3x}; 系数为x = -3; 常数= 6;

最终结果=(6-5)/(-1 - ( - 3))

class Solution { //12ms
    public String solveEquation(String equation) {
        String[] parts = equation.split("=");
        int[] leftPart = evaluate(parts[0]);
        int[] rightPart = evaluate(parts[1]);
        if (leftPart[0] == rightPart[0] && leftPart[1] == rightPart[1]){
            return "Infinite solutions";
        }else if (leftPart[0] == rightPart[0]){
            return "No solution";
        }
        return "x=" + (rightPart[1] - leftPart[1]) / (leftPart[0] - rightPart[0]);
    }
    public int[] evaluate(String str){
        String[] tokens = str.split("(?=[+-])");//()匹配组; ?=匹配并包含在res中; [+ - ]表示+或 - ;
        int[] res = new int[2];//记录系数为x; 系数为常数
        for (String token : tokens){
            if (token.equals("+x") || token.equals("x")){
                res[0] ++;// x表示1x
            }else if (token.equals("-x")){
                res[0] --;
            }else if (token.contains("x")){
                res[0] += Integer.parseInt(token.substring(0,token.length() - 1));
            }else{
                res[1] += Integer.parseInt(token);
            }

        }
        return res;
    }
}

② 在discuss中看到的,思路相同。

class Solution { //9ms
    public String solveEquation(String equation) {
        if(equation == null || equation.length() == 0) return "No solution";
        String[] sides = equation.split("=");
        int[] left = parse(sides[0]), right = parse(sides[1]);
        if(left[0] == right[0]) {
            if(left[1] == right[1]) return "Infinite solutions";
            return "No solution";
        }
        int val = (right[1] - left[1]) / (left[0] - right[0]);
        return "x=" + val;
    }
    
    private int[] parse(String s) {
        int sign = 1, val = 0;
        int[] res = new int[2];
        for(int i = 0; i < s.length(); i ++) {
            char c = s.charAt(i);
            if(c == 'x') {
                if(i == 0) res[0] ++;
                else if(s.charAt(i-1) == '-' || s.charAt(i-1) == '+') res[0] += sign;
                else res[0] += sign * val;
                val = 0;
            } else if(c == '-' || c == '+') {
                res[1] += sign * val;
                val = 0;
                sign = c == '-' ? -1 : 1;
            } else {
                val = val * 10 + c - '0';
            }
        }
        res[1] += sign * val;
        return res;
    }
}

转载于:https://my.oschina.net/liyurong/blog/1606460

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/539632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[C#学习] DataAdapter.Fill()分页

查询结果分页是以较小数据子集&#xff08;即页&#xff09;的形式返回查询结果的过程。 它通常用于以易于管理的小块形式向用户显示结果。DataAdapter 提供了通过 Fill 方法的重载来仅返回一页数据的功能。 但是&#xff0c;对于大量的查询结果&#xff0c;它可能并不是首选的…

java流读取字符串_javaIO之字符流是怎么读取的?

最近在看io相关的知识&#xff0c;遇到一些小问题&#xff0c;以下有例子来说明问题&#xff1a;比如&#xff1a;12345 是一个十进制数根据ASCII码找到是 &#xff1a;二进制 00110001 00110010 00110011 00110100 00110101十进制4950515253十六进制 0x310x320x330x340x35文件…

什么是mybatis,mybatis有什么特点

jdbc开发优缺点&#xff1a;http://blog.csdn.net/zengmingen/article/details/51180796 hibernate开发优缺点&#xff1a;http://blog.csdn.net/zengmingen/article/details/51180805 1&#xff09;基于上述二种支持&#xff0c;我们需要在中间找到一个平衡点呢&#xff1f;结…

简易RPC框架实现

写在最前面 PRC(Remote Procedure Call) 远程过程调用。通俗的讲就是程序通过RPC框架调用远程主机的方法就如同调用本地方法一样。Dubbo就是这样一个Rpc框架&#xff0c;本文主要参考Dubbo的设计思路&#xff0c;简易实现了Rpc框架。 本文涉及到知识点包括&#xff1a; Jdk 动态…

kafka java获取topic_通过编程方式获取Kafka中Topic的Metadata信息

如果我们需要通过编程的方式来获取到TopicMetadataRequest请求到 def findLeader(topic: String): Unit {val consumer connect("www.iteblog.com", 9092)val req TopicMetadataRequest(TopicMetadataRequest.CurrentVersion,0, kafkaGroupId, List(topic))val to…

redis java 遍历key_java遍历读取整个redis数据库实例

redis提供了灵活的数据查询方式&#xff0c;最牛的就是key的搜索支持正则表达式。jedis.keys(“*”);表示搜索所有keyjedis.keys(“abc*”)表示搜索开头为abc的key数据遍历了key就能遍历到value。其实就是一个setRedisDO rd new RedisDO();rd.open();Set s rd.jedis.keys(&qu…

js学习

为什么80%的码农都做不了架构师&#xff1f;>>> /* my code */ var gArrSpell [ 1111, 2222, 3333, 4444, 5555, 6666, 7777, 8888, 999999, AAAA, bbbb, cccc, dddd, eeee, fffff ];var gArrSplDmg [11,12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24…

代码在eclipse下不报错,在doc命令行下报错--jar file和runable jar file

今天开发一个小工具&#xff0c;引用了Log4j&#xff0c;来记录日志&#xff0c;在eclipse下运行&#xff0c;代码正常&#xff0c;打包成jar放到doc命令行下运行报错&#xff1a; Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/logging/…

gradle java ide_使用Gradle构建Java项目

使用Gradle构建Java项目这个手册将通过一个简单的Java项目向大家介绍如何使用Gradle构建Java项目。我们将要做什么&#xff1f;我们将在这篇文档航中创建一个简单的Java项目&#xff0c;然后使用Gradle构建它。需要准备什么&#xff1f;预留15分钟空闲时间一件称手的兵器(你最喜…

小马激活软件下载,当心伪小马,有病毒

官方的小马激活软件已经停止更新了&#xff0c;下文是官方停更公告。 http://www.pccppc.com/xiaomajihuo-html 所以小马oem7以后的都不是官方的&#xff0c;包含病毒。重装系统后&#xff0c;一般是先激活系统&#xff0c;再安装杀毒软件&#xff0c;这就给“伪小马激活工具”…

truncate,delete,drop之间的区别

TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同&#xff1a;二者均删除表中的全部行。 但 TRUNCATE TABLE 比 DELETE 速度快&#xff0c;且使用的系统和事务日志资源少。 DELETE 语句每次删除一行&#xff0c;并在事务日志中为所删除的每行记录一项。 TRUNCATE…

三张图搞懂JavaScript的原型对象与原型链

对于新人来说&#xff0c;JavaScript的原型是一个很让人头疼的事情&#xff0c;一来prototype容易与__proto__混淆&#xff0c;二来它们之间的各种指向实在有些复杂&#xff0c;其实市面上已经有非常多的文章在尝试说清楚&#xff0c;有一张所谓很经典的图&#xff0c;上面画了…

python partial_如何在python多处理模块中使用partial函数?

下面是我如何解决这个问题的一个简单例子from functools import partialfrom multiprocessing import Pooldef VariadicLifter(func, args):return func(*args)def func(x,y,z,a):return x2*y3*z4*aif __name__ __main__:func_ partial( func, 500, 1007)lfunc_ partial( Va…

Mybatis中resultMap

MyBatis中在查询进行select映射的时候&#xff0c;返回类型可以用resultType&#xff0c;也可以用resultMap&#xff0c;resultType是直接 表示返回类型的&#xff0c;而resultMap则是对外部ResultMap的引用&#xff0c;但是resultType跟resultMap不能同时存在。 1.resultType …

超简单的mysql多实例布置

一、基本概念mysql下载&#xff1a;http://mirrors.sohu.com/mysql/MySQL-5.5/1、MySQL多实例就是在一台机器上面开启多个不同的端口&#xff0c;运行多个MySQL服务进程。这些MySQL多实例公用一套安装程序&#xff0c;使用不同的(也可以是相同的)配置文件&#xff0c;启动程序&…

java程序设计计算器_Java程序设计计算器(含代码)

Java程序课程设计任务书实用性计算器的设计与开发1、主要内容&#xff1a;开发一个实用型的计算器程序&#xff0c;实现基本的计算功能同时并进行相应的功能拓展&#xff0c;使其具更加人性化的功能。我们可以用其进行相应的计算功能来方便我们的学习&#xff0c;代替我们进行一…

mybatis配置insert/update/delete同一个模板

insert&#xff0c;update&#xff0c;delete标签只是一个模板&#xff0c;在操作时是以sql语句为核心的&#xff0c; 即在做增/删/改时&#xff0c;insert/update/delete便签可以通用&#xff0c; 但做查询时只能用 select 标签 提倡什么操作就用什么标签 这就是为什么 ex…

Mybatis配置文件resultMap映射啥时候可写可不写?

1、student实体类 public class Student {private Integer id;//编号private String name;//姓名private Double sal;//薪水public Student(){}public Student(Integer id, String name, Double sal) {this.id id;this.name name;this.sal sal;}public Integer getId() {ret…

arithmetic java_Java:Arithmetic

好吧&#xff0c;事实上你有方法设置变量叫get - 这显然不是一个好主意&#xff0c;并且没有缩进......但它应该有效。但是&#xff0c;你还没有展示出你是如何使用它的。也许你实际上并没有被称为setter方法&#xff1f;以下是相同代码但具有不同名称的示例&#xff0c;以及使…

网络框架 Retrofit(三)

简单实现Retrofit&#xff08;替代Okhttp&#xff09; 1.定义注解参数 Documented Target(PARAMETER) Retention(RUNTIME) public interface Field {String value(); } 复制代码Documented Target(METHOD) Retention(RUNTIME) public interface Get {String value() default &q…