蓝桥与力扣刷题(蓝桥 好数)

题目:一个整数如果按从低位到高位的顺序,奇数位 (个位、百位、万位 ⋯⋯ ) 上的数字是奇数,偶数位 (十位、千位、十万位 ⋯⋯ ) 上的数字是偶数,我们就称之为 “好数”。

给定一个正整数 N,请计算从 1 到 N 一共有多少个好数。

输入格式

一个整数 N。

输出格式

一个整数代表答案。

样例输入 1

24

样例输出 1

7

样例输入 2

2024

样例输出 2

150

样例说明

对于第一个样例,24 以内的好数有 1、3、5、7、9、21、23,一共 7 个。

解题思路+代码:

蓝桥与力扣刷题(蓝桥 好数)_第1张图片

蓝桥与力扣刷题(蓝桥 好数)_第2张图片

代码:

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
      /**
      思路:
      1.遍历正整数N
      2.从右往左遍历,满足好数条件时count++;不满足好数的条件时跳过当前数字
      3.输出好数的个数
      */
        Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
        int N = scan.nextInt(); //读取正整数N
        int count = 0; //总计好数的个数
        //遍历
        for(int i = 1;i <= N;i++){
          String str = Integer.toString(i); // 将整数i转换为字符串,可以逐位处理
          boolean flag = true;
          //从右至左开始遍历
          for(int j = 0;j < str.length();j++){
             int digit = str.charAt(j) - '0'; // 获取当前位的数字
             int position = str.length() - j; // 从右到左的位置
             //判断奇数位和偶数位是否满足条件
            if((position % 2 == 0 && digit % 2 == 1) || (position % 2 == 1 && digit % 2 == 0)){
              flag = false;
              break;
            }
          }
               if(flag){
                  count++;
                }
        }
        System.out.println(count);
        scan.close();
    }
}

总结:解答这道题需要对所给的正整数进行详细的分析,这样的分析存在难点:从正整数的个位开始遍历,要对正整数从右至左开始遍历,需要将数字转换为字符串,逐位检查每一位是否满足条件。确保在检查每一位时,正确处理奇数位和偶数位的条件。如果不满足好数的条件时,直接跳过该数。

你可能感兴趣的:(leetcode,算法,职场和发展,学习方法,java)