LeetCode小笔记

LeetCode

判断int类型计算后是否越界

  • java中int类型占4个字节,32位
  • 取值范围为-2^31~2^31-1 (-2147483648~2147483647)
1
2
3
4
//判断int值计算前后是否相等,假设需要计算 result = x * 10
if(result*10/10 != result){
//越界
}

反转int

  • 遍历int的每个数字
  • 输入123456789,输入987654321
  • 输入-123456789,输入-987654321
1
2
3
4
5
6
7
8
9
#将输入的int反转输入
private int reversal(int input){
int result = 0;
while(input != 0){
result = result*10 + input%10;
input /= 10;
}
return result;
}

反转string

  • 利用stack新进后出特性进行反转
1
2
3
4
5
6
7
8
9
//java.util.Stack类:先进后出
Stack<Character> stack = new Stack<Character>();
String s = "abcdef";
for(char c : s.toCharArray()){
stack.push(c);
}
while(!stack.isEmpty()){
System.out.print(stack.pop());
}

char字符和int之间的转化

  • 因为ascii中’0’并不对应0
1
2
3
4
5
6
//char 转 int
char x = '13';
int y = x - '0';

//int 转 char[]
char[] c = String.valueOf(123456).toCharArray();

判断字符串中是否有某个字符

1
private boolean hasChar(String s, char c){return s.indexOf(c) != -1;}

Java中的length、length()、size()

  • 数组长度属性,使用length
  • String的长度,使用length()方法
  • 泛型中元素个数,使用size()方法
1
2
3
4
int[] x = {1,2,3,4,5};
String y = "abcdde";
ArrayList<Object> z = new ArrayList();
System.out.print(x.length+y.length()+z.size());

二进制运算

  • 取最高非0位(00001024的最高非0位是00001000):Integer.highestOneBit(num)
  • 取掩码(00001024的掩码是00001111):(Integer.highestOneBit(num) << 1) - 1
  • 负数用补码表示,整数用正码表示,补码+正码=0(-5+5=0);补码=(绝对值)二进制+1 再补正反位为1。

集合类转数组

  • ArrayList.toArray();转化为