【LeetCode(Java) - 246】中心对称数

【LeetCode(Java) - 246】中心对称数

文章目录

1、题目描述

2、解题思路

3、解题代码

1、题目描述

2、解题思路

??首先,0-9 的数字中,上下颠倒后还是数字的只有:0、1、6、8、9,其中,0、1、8 上下颠倒后还是它本身,6和9互为颠倒。

??1、遍历字符串,发现存在非{0,1,6,8,9}的字符,直接 false;

??2、如果字符串长度为 1,只能为{0,1,8}之一,否则 false;

??3、如果字符串长度为奇数,那么正中间的字符只能为{0,1,8}之一,否则 false;

??4、左右对称遍历:

??4.1 如果 num[i] == num[length-1-i],且不是 6 或者 9,则 true;如果相等且是 6 或者 9,则 false;

??4.2 如果 num[i] != num[length-1-i],必须是一边6另一边9,否则 false;

??5、经过 1-4 都没有返回 false,则通过了验证,返回 true。

3、解题代码

class Solution {

public boolean isStrobogrammatic(String num) {

int length = num.length();

if (length == 1) return "0".equals(num) || "1".equals(num) || "8".equals(num);

List list = Arrays.asList('0', '1', '6', '8', '9');

// 如果长度为奇数,则正中间的数字必须为 0 1 8

if (length % 2 != 0) {

char mid = num.charAt(length / 2);

if (!(mid == '0' || mid == '1' || mid == '8')) return false;

}

// 判断有没有不在 {0,1,6,8} 里面的数字,有则直接 false

for (int i = 0; i < length; i++) {

if (!list.contains(num.charAt(i))) return false;

}

// 经过上面遍历,到这一步说明 num 不存在 0 1 6 8 以外的数字

// 这一步从两边往里遍历,看是否左右相等,或者一边6一边9

for (int j = 0; j <= length / 2; j++) {

if (num.charAt(j) != num.charAt(length - 1 - j)) {

if ((num.charAt(j) == '6' && num.charAt(length - 1 - j) == '9') || (num.charAt(j) == '9' && num.charAt(length - 1 - j) == '6')) {

continue;

} else {

return false;

}

} else {

if (num.charAt(j) == '6' || num.charAt(j) == '9') return false;

}

}

return true;

}

}

【LeetCode(Java) - 246】中心对称数相关教程

中心对称数 java_【LeetCode(Java) - 246】中心对称数相关推荐

  1. leetcode combinations java_[LeetCode][Java] Combinations

    题目: Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For ex ...

  2. combinations java_[LeetCode][Java] Combinations

    题目: Given two integers n and k, return all possible combinations of k numbers out of 1 ... n. For ex ...

  3. LeetCode实战:两数相加

    题目英文 You are given two non-empty linked lists representing two non-negative integers. The digits are ...

  4. LeetCode 246. 中心对称数(哈希)

    文章目录 1. 题目 2. 解题 1. 题目 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看). 请写一个函数来判断该数字是否是中心对称数,其输入将会以一个字符串 ...

  5. leetCode:twoSum 两数之和 【JAVA实现】

    LeetCode 两数之和 给定一个整数数组,返回两个数字的索引,使它们相加到特定目标. 您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素. 更多文章查看个人博客 个人博客地址:t ...

  6. leetcode|第三大的数java题解

    由于在面试作业帮.好未来侧开实习面试的时候都被问到了这道题,所以我就来写个题解吧 给你一个非空数组,返回此数组中 第三大的数 .如果不存在,则返回数组中最大的数. 示例 1: 输入:[3, 2, 1] ...

  7. LeetCode(1.俩数之和)JAVA

    LeetCode(1.俩数之和) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是 ...

  8. 找异数java_小米19秋招java开发~ 分享笔试题希望春招有好运

    1.一个作业系统中有4台打印机,每个作业需要独占2台打印机才能完成,则该系统最多可以同时执行多少作业而保证不会死锁?(A) A. 3 B. 1 C. 2 D. 4 2.假设一个无向图中包含12个顶点, ...

  9. LeetCode 1056. 易混淆数(哈希)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个数字 N,当它满足以下条件的时候返回 true: 原数字旋转 180° 以后可以得到新的数字. 如 0, 1, 6, 8, 9 旋转 180° 以 ...

最新文章

  1. echart的关系图高亮_echart中饼状图的高亮显示。
  2. DNS与Active Directory在两台服务器分别布署
  3. Java Web学习计划
  4. ansible企业级自动化运维工具
  5. Linux-Android系统启动之INIT进程和system v init
  6. [环境搭建]SDN网络感知服务与最短路径应用
  7. LeetCode 2190. 数组中紧跟 key 之后出现最频繁的数字
  8. 从零搭建基于知识图谱的问答系统(以医疗行业为例)
  9. 以色辨位的Farmer(洛谷P5832题题解,Java语言描述)
  10. ABTest灰度发布
  11. JavaScript学习笔记——对表单的操作
  12. 一个定时器的普通实现,多进程实现和多线程实现的对比
  13. 使用Java复制文件及显示进度
  14. Android手机avi转换为mp4手机,avi转mp4怎么进行 avi转mp4方法介绍【图解】
  15. 李开复--生命是最严厉的导师
  16. Android如何配置init.rc中的开机启动进程(service)【转】
  17. 如何防止恶意攻击短信验证码接口
  18. 教你怎么批量查询快递单号,一学就会
  19. 泛型的基础 装箱拆箱
  20. gin阶段学习(入门)

热门文章

  1. 【java】java Integer 缓存 一定是 -128~127 吗
  2. 【java】为什么 HashMap 的加载因子是0.75?
  3. 【registry】registry An exception was thrown while processing request with message
  4. 95-080-044-源码-启动-jobmanager.sh
  5. 95-080-054-源码-启动-启动TaskManager
  6. 【Flink】Flink Distributed Cache 分布式缓存
  7. Kudu : tablet=null, server=null, status=Timed out: can not complete before timeout: Batch
  8. Netty : netty 3如何解决空轮询bug
  9. SpringBoot之Bean之多实例选择
  10. 一个多线程练习,为什么直接运行和debug结果不一样