最近刷了下华为机试,看了下多线程视频,多线程的暂时没看完,先把刷题的总结一下。
获取输入
new BufferedReader(new InputStreamReader(System.in));
String str;
输入流
while ((str = br.readLine(bytes)) != null) {
}
StringBuilder
new StringBuilder();
sb.append();
数据转换
int num = Integer.parseInt(str);
StreamTokenizer
分隔输入流
new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
st.nextToken(); // 分隔符
int i=(int) st.nval;//st.navl默认解析出的格式是double
ASCII编码对照
A:65
0:48
a:97
Math.pow(a,b)= a^b
str.charAt(start)
返回字符串该位置的值
int index = str.IndexOf(".")
返回小数点位置
InputStream in = System.in;//获取IO接口
int len=in.available()-1;//获取长度
arr[len]=(char)in.read();//获取输入
**lastIndexOf() **
可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索。
String.valueOf
把不同类型转化为String类型
StringBuffer
StringBuffer strBuffer = new StringBuffer();
strBuffer = new StringBuffer(str);
strBuffer.reverse();
Scanner
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
数字转二进制字符
char [] numChars = Integer.toBinaryString(num).toCharArray();
递归从尾到头顺序返回链表
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> arrayList = new ArraList<Integer>();
if(listNode!=null){
this.printListFromTailToHead(listNode.next);
arrayList.add(listNode.val);
}
return arrayList
}
}
Stack的创建
Stack<Integer> stack1 = new Stack<Integer>();
输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。
public class Solution {
public int NumberOf1(int n) {
int res = 0;
while(n!=0){
res += n&1;//个位数相与
n >>>= 1;//无符号右移。无论是正数还是负数,高位通通补0。
}
return res;
}
}
“>>>”运算符所作的是无符号的位移处理,它不会将所处理的值的最高位视为正负符号,所以作位移处理时,会直接在空出的高位填入0。当我们要作位移的原始值并非代表数值时(例如:表示颜色图素的值,最高位并非正负号),可能就会需要使用此种无符号的位移。比如:
-10>>>2=1073741821
-10=1111 1111 1111 1111 1111 1111 1111 0110 (不管原来的“符号”位的值(一长串1),空上的全部直接填0)
>>>= 右移赋值,左边空出的位以0填充
输入一个链表,输出该链表中倒数第k个结点。
如果该链表长度小于k,请返回空。
**思路:**在链表中:倒数的+顺数的长度等于链表总长度,所以可以设置两个链表,一个先走k步,剩下的到链表的末尾要走的部署就是倒数第k个节点,从头开始走的步数。
1.第一个走了k,剩下n-k步
2.第二个开始走,要走n-k步
3.则n-k的位置则是倒数第k个
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* public ListNode(int val) {
* this.val = val;
* }
* }
*/
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @param k int整型
* @return ListNode类
*/
public ListNode FindKthToTail (ListNode pHead, int k) {
// write code here
ListNode first =pHead;
ListNode second = pHead;
for(int i = 0;i<k;i++){
if(first==null){
return null;
}
first=first.next;
}
while(first!=null){
first=first.next;
second=second.next;
}
return second;
}
}