0111 1111 1111 1111 1111 1111 1111 1111 // num
1000 0000 0000 0000 0000 0000 0000 0000 // ~num
0100 0000 0000 0000 0000 0000 0000 0000 // Integer.highestOneBit(num)
1000 0000 0000 0000 0000 0000 0000 0000 // Integer.highestOneBit(num) << 1
0111 1111 1111 1111 1111 1111 1111 1111 // Integer.highestOneBit(num) << 1 - 1
至此,我们知道后面那些位,都是需要flip的。
Leetcode 476. Number Complement
- java - int - 32 bit
- 找到可以开始取反的位置。(highestOneBit(n))
其后的位数都是有用的 => Mask(有用位数都标记为1)
最后输出“(~num) & mask;”
那么如何找到Mask呢?
见开头代码块。
- 注意:mask 和 num都是定义的int
对其后位置的各位进行取反。
Java运算符优先级整理
/*注意 位运算 优先级在 算术运算 之后 */
括号(1级): () .(取成员变量)
单目(2级)(从右向左) ! +(正)-(负)~(按位取反) ++ --
算术(3-5级) * / %---->>>> + ----->>>><< >> >>>
关系(6-7级) < <= > >= instanceof---->>>> == !=
位(8-10级)(特殊的单目) & ---->>>>^ ---->>>> |
逻辑(11-12级) && ---->>>> ||
条件(13级) ? :
赋值(14级)(从右向左) = += -+ *= /= %= &= |= ^= ~= <<= >>= >>>=
小括號(parentheses)
大括號(curly brackets)
67. Add Binary
How to encode binary and do computation?
???
补齐位数后,每位相加。
用一个int记录 - 进位。
注意:
”String“
58. Length of Last Word
Thoughts:
First, separate the last world
Second, count its length.
计算最后一个词——从后往前scan!:
后面为空:一直往前,直到不为空;
记录最后一个词;
遇到空格停止。
if(s.isEmpty()) return 0;
int lastIndex = s.length()-1, leftIndex = 0;
while(lastIndex>0 && s.charAt(lastIndex) == ' ') lastIndex--; // trim
leftIndex = lastIndex;
while(leftIndex>=0 && s.charAt(leftIndex) != ' ') leftIndex--; // find the penultimate index of space in s.
return lastIndex - leftIndex;
For the first part,
SAVE chars until you encounter the space -
move out all;
SAVE.
end
s.trim();
length property.
int [] ar; ar.length;
String st; st.length();
网友评论