Day 9

zhanglei 2022年07月30日 361次浏览

Day 9

剑指offer 20.表示数值的字符串

题目描述

image-20220730150452098

思路

image-20220730150102970

image-20220730150340060

解答

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.调整数组顺序使奇数位于偶数前面

题目描述

image-20220730151218365

思路

image-20220730153854567

解答

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;
    }
}