Day 9
剑指offer 20.表示数值的字符串
题目描述
思路
解答
class Solution {
public boolean isNumber(String s) {
int n = s.length();
int index = 0;
// 四个标记位
boolean hasNum = false, hasE = false;
boolean hasSign = false, hasDot = false;
// 将index 移到第一个非空格处
while(index < n && s.charAt(index) == ' ')
index++;
// 当下标 index 尚未达到字符串末尾
while(index < n){
// 当前字符是数字 0~9
while(index < n && s.charAt(index) >= '0' && s.charAt(index) <= '9'){
index++;
hasNum = true;
}
// 如果第一个数字后全是数字,退出循环
if(index == n){
break;
}
char c = s.charAt(index);
// 当前字符是 e 或者 E
if(c == 'e' || c == 'E'){
// e 或 E 已经出现过,或者数字没有出现过,则该字符串必定无法表示数值,返回 false
if(hasE || !hasNum){
return false;
}
hasE = true;
hasNum = false; hasSign = false;
hasDot = false;
// 当前字符是正负号
}else if(c == '+' || c == '-'){
// 如果已经出现过符号、数字、小数点,则该字符串必定无法表示数值,返回 false
if(hasSign || hasNum || hasDot){
return false;
}
hasSign = true;
// 如果是小数点
}else if(c == '.'){
// 如果已经出现过小数点、e / E ,则该字符串必定无法表示数值,返回 false
if(hasDot || hasE){
return false;
}
hasDot = true;
// 如果是空格,跳出循环
}else if(c == ' '){
break;
}else{
// 非法字符
return false;
}
// 继续判断下一个字符
index++;
}
// 如果当前下标尚未到达字符串末尾,则剩下的字符应当全部为空格,否则该字符串必定无法表示数值,返回 false
while(index < n && s.charAt(index) == ' ')
index++;
return hasNum && index == n;
}
}
剑指offer 21.调整数组顺序使奇数位于偶数前面
题目描述
思路
解答
class Solution {
public int[] exchange(int[] nums) {
int t;
int i=0;
int j=nums.length-1;
while(i<j){
// 将 i和 j移动到第一对需要交换的位置
while( i<j && nums[i]%2==1) i++;
while( i<j && nums[j]%2==0) j--;
//交换
t=nums[i];
nums[i]=nums[j];
nums[j]=t;
}
return nums;
}
}