三大语言刷题tip

结构

链表结构

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包中的两个类:BigIntegerBigDecimal。这两个类可以处理包含任意长度数字序列的数值。

/*使用静态方法将普通数值转换为大数值*/
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())
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值