文章目录
结构
链表结构
java链表模板
链表的定义
public class ListNode {
int item;
ListNode next;
ListNode(int x){item = x;}
}
链表使用示例
public class ListMain {
public static void main(String[] args)
{
ListNode first = new ListNode(1);
ListNode second = new ListNode(2);
ListNode third = new ListNode(3);
first.next = second;
second.next = third;
ListNode head = new ListNode(0);
head.next = first;
for(ListNode i = head; i.next != null ; i = i.next)
{
System.out.println(i.next.item);
}
}
}
C++链表模板
链表定义
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x),next(nullptr){};
};
链表使用示例
class Solution {
public:
static ListNode* addTwoNuumbers(ListNode* l1, ListNode* l2)
{
while(l1->next != nullptr)
}
};
python链表模板
链表定义
class ListNode:
def __init__(self, elem):
self.val = elem
self.next = None
链表使用示例
q1 = ListNode(1)
q2 = ListNode(2)
q3 = ListNode(3)
q1.next = q2
q2.next = q3
def fun(p):
while p:
print(p.elem)
p=p.next
$fun(q)
"""
1
2
3
"""
C++
pair结构模板
pair结构可以在处理坐标的时候使用,该结构模板不需要导入头文件,有两个数据成员,一个为first,一个为second
使用示例如下:
//使用using std::pair即可使用
pair<int,int> p[3]; //定义了三个坐标
p[0].first = 0;
p[0].second =1;
vector 的begin(),end()返回值
vector 的begin(),end()返回类型为iterator指针,因此需要用iterator来接纳,同时,注意此时要引入vector命名地址空间
iterator指针也可以使用*符号进行取值运算
#include<vector>
#include<iterator>
#include<iostream>
using std::vector;
vector<int> a(10,1);
vector<int>::iterator p = a.begin();
std::cout<<*p;
c++异常处理
c++使用exception头文件进行异常处理,同时要引入标准名字空间
需要注意的是抛出exception之后,会显示00000
#include<exception>
#include<iostream>
int main()
{
throw std::exception();
return 0;
}
//
//00000
//
Java
Java 输入多行数组并输出
public class TestMain
{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Scanner scanner1 = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int [][] num = new int[n][m];
for(int i=0;i<n;i++)
{
String[] temps = scanner1.nextLine().split(" ");
for(int j=0;j<m;j++)
num[i][j] = Integer.parseInt(temps[j]);
}
for(int []a:num)
for(int i:a)
System.out.println(i);
}
}
字符串反向
- 法1 直接从前方链接
/*要求输出BA
string c = "B" + "A";
- 法2 reverse()方法
public class Rev()
{
public static void main(String [] args)
{
Scanner in = new Scanner (Syestem.in);
String string = in.next();
String restring = new StringBuffer(string).reverse().toString();
//或者这里直接使用StringBuffer声明restring,这样免去了toString()
}
}
字符串链接
- 法1 :concat()方法
String string1 = "A";
String string2 = "B";
String string3 = string1.concat("A")
- 法2 :使用 +
String string1 = "A";
String string2 = "B";
String string3 = string1 + string2;
String类直接可以+字符,如下
String string1 = "A";
char ch = 'B';
String string3 = string1 + string2;
Java大数
若基本的整数和浮点数精度不满足要求,可以使用java.math
包中的两个类:BigInteger
和BigDecimal
。这两个类可以处理包含任意长度数字序列的数值。
/*使用静态方法将普通数值转换为大数值*/
BigInteger a = BigInteger.valueOf(100);
/*大数加和大数乘的运算*/
BigInteger c = a.add(b);
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2)));
for each 循环
注意,以下for each循环的使用是错误的
for(char i : chArray)
chArray[i] = RandomCharacter.getRandomLowercase();
同样,这样的使用,也是错误的
for(int i : chArray)
chArray[i] = RandomCharacter.getRandomLowercase();
要牢记for each的形式
for(element i : a)
statement; // statement 中i代替a的元素
for each 在函数调用中会造成数组越界,慎用
字符串和整型,浮点数的转换
public class Str2Num
{
int a = Integer.parseInt("10");
double b = Double.parseDouble("10");
System.out.printf("%d\n%f\n", a,b);
}
public class Num2Str
{
String a = Integer.toString(10);
System.out.printf("%s\n",a);
String b = Double.toString(10);
System.out.printf("%s",b);
}
Java数组排序
可以使用 java.util.Arrays.sort(arrsay)方法对一个数组排序
如果要对数组列表进行排序,使用java.util.Collections.sort(arrayList)
java字符串问题采用c风格
java字符串问题,申请新字符数组的时候可以采用c风格,这样比较简洁,例子如下:
涉及到字符串问题,混合c风格比较简单
int nlen=len+2*count;
char a[]=new char[nlen];
while(len>0&&nlen>=len){
if(s.charAt(len-1)==' '){
a[--nlen]='0';
a[--nlen]='2';
a[--nlen]='%';
}
else
a[--nlen]=s.charAt(len-1);
len--;
包装类都有valueOf的方法可用于转换
//s 为StringBuffer型,除了可以使用toString,还可以
String.ValueOf(s);
//其他包装类有类似的方法
Java强制转换的坑
char []a = {'0'};
int i = 1;
a[0] = '0'+ i; //本句报错
- 在Java上述代码报错,C++不报错
Java中的return语句
在Java循环体中写入return时,有时IDE报未找到return,如下
public class Test
{
public int fun(int a, int b)
{
if(a < b)
return 1;
}
}
此时只要在判断语句外边再写return即可解决问题,或者在else中添加return即可
public class Test
{
public int fun(int a, int b)
{
if(a < b)
return 1;
else
return 1;
}
}
//或者
/*public class Test
{
public int fun(int a, int b)
{
if(a < b)
return 1;
return 1;
}
}
*/
python
python输入多行数组
法1:采用迭代的方法
if __name__ == '__main__':
m = input()
all = []
for i in range(int(m)):
a = []
temp = input().split(" ")
for j in temp:
a.append(int(j))
all.append(a)
print(all)
法2:使用map
if __name__ == '__main__':
m = input()
all = []
for i in range(int(m)):
a = list(map(int, input().split(" ")))
all.append(a) //这里如果将append换为extend(),将得到[1,2,3,4,5,6,7,8,9]
print(all)
"""
输入:
3
1 2 3
4 5 6
7 8 9
输出:
[[1,2,3],[4,5,6],[7,8,9]]
"""
append()方法与+运算
a = [1, 2, 3]
b = [4, 5, 6]
all1 = []
all2 = []
all1.append(a)
all2.append(b)
all2 += a
alll2 += b
"""
all1 = [[1,2,3],[4,5,6]]
all2 = [1,2,3,4,5,6]
将append()方法替换为extend(),将得到与+运算类似的效果
"""
python 类的调用
#定义部分
#该类定义在包Solutions的Solution.py文件中
class Solution:
def __init__(self):
pass
def fun(self):
pass
#调用部分
from Solutions import Solution as Fun
a = Fun.Solution() //实例化
print(a.fun())