这个题是力扣上面的——640. 求解方程;题不难,写上来是因为很麻烦,调了很久,总要留做一个纪念~~~
题目描述:
求解一个给定的方程,将x以字符串"x=#value"的形式返回。该方程仅包含’+’,’ - '操作,变量 x 和其对应系数。
如果方程没有解,请返回“No solution”。
如果方程有无限解,则返回“Infinite solutions”。
如果方程中只有一个解,要保证返回值 x 是一个整数。
示例 1:
输入: “x+5-3+x=6+x-2”
输出: “x=2”
示例 2:
输入: “x=x”
输出: “Infinite solutions”
示例 3:
输入: “2x=x”
输出: “x=0”
示例 4:
输入: “2x+3x-6x=x+2”
输出: “x=-1”
示例 5:
输入: “x=x+2”
输出: “No solution”
解题思路:
(1)进行替换String e = equation.replace("-x","-1x").replace("-",“±”);
(2)用等号进行分割,左右
(3)左右分别用String [] ls=left.split("\+");
(4)分别找到左右的x系数和常数的系数,最后进行处理即可。
注:记得转义字符
代码实现:
class Solution {
public static String solveEquation(String equation) {
String e = equation.replace("-x","-1x").replace("-","+-");//.replace("x","1x");
String [] ss=e.split("=");
String left=ss[0];
String right=ss[1];
long xiShuz=0;
long sumz=0;
//System.out.println(left);
//System.out.println(right);
String [] ls=left.split("\\+");
//System.out.println(Arrays.toString(ls));
for(int i=0;i<ls.length;i++) {
if(ls[i].length()==0) {
continue;
if(ls[i].contains("x")) {
if(ls[i].equals("x")) {
xiShuz+=1;
}else {
xiShuz+=Integer.parseInt(ls[i].replace("x", ""));
}else {
sumz+=Integer.parseInt(ls[i]);
//System.out.println(xiShuz+","+sumz);
long xiShuy=0;
long sumy=0;
String [] rs=right.split("\\+");
//System.out.println(Arrays.toString(rs));
for(int i=0;i<rs.length;i++) {
if(rs[i].length()==0) {
continue;
if(rs[i].contains("x")) {
if(rs[i].equals("x")) {
xiShuy+=1;
}else {
xiShuy+=Integer.parseInt(rs[i].replace("x", ""));
}else {
sumy+=Integer.parseInt(rs[i]);
//System.out.println(xiShuy+","+sumy);
long xiShu=xiShuz-xiShuy;
long sum=sumy-sumz;
if(xiShu==0 && sum==0) {
return "Infinite solutions";
}else if(xiShu==0 && sum!=0) {
return "No solution";
}else if(xiShu!=0 && sum==0) {
return "x=0";
}else {
int sign=1;
if(xiShu<0) {
sign*=-1;
xiShu=-xiShu;
if(sum<0) {
sign*=-1;
sum=-sum;
long ys=getGys(xiShu,sum);
xiShu/=ys;
sum/=ys;
if(xiShu==1) {
return "x"+"="+(sign*sum);
return xiShu+"x"+"="+(sign*sum);
//这是万一两个数可以进行约分
private static long getGys(long xiShu, long sum) {
long max = Math.max(xiShu, sum);
long min = Math.min(xiShu, sum);
long ys=max%min;
while(ys!=0) {
max=min;
min=ys;
ys=max%min;
return min;
bs4 python 所有的文本 python 文本类型
文件一、编码格式二、文件的读写(一)创建:open()(二)文件类型(三)常用方法三、with语句四、目录操作(一)os(二)os.path(三)walk 一、编码格式1.Python的解释器使用的是Unicode(内存)。 2…py文件在磁盘上使用的是UTF-8(外存)。二、文件的读写(一)创建:open()f = open(filename[, mode, encoding])
# f:对
a标签设置 jquery jquery给a标签绑定事件
<a id="alink" href="abc.aspx" style="visibility: hidden;">下一步</a>
$("#alink").click(); // 触发了a标签的点击事件,但是没有触发页面跳转
document.getElementById("alink").click(); //既触发了
java 实现udp打洞 java udp编程
大家都知道java中的socket网络编程,而其采用的协议分别有tcp和udp协议两种.通常的理解tcp协议类似于打电话,udp类似于发短信.前者是线程安全的,但是效率比较低.后者则刚好相反.今天就做个demo来了解一下udp网络编程.首先是客户端:package javasocket.demo;
import java.net.DatagramPacket;
import java.net.D