BasedLeetCode

LeetCode learning records based on Java,Kotlin,Python...Github 地址

序号对应 LeetCode 中题目序号

9 判断一个整数是否是回文数。不能使用辅助空间

什么是回文数:“回文”是指正读反读都能读通的句子;如:"123321","我为人人,人人为我"等

  • Java 语言实现
    public static boolean isPalindrome(int x) {
if (x < 0) {//负数不是回文数
return false;
} else if (x < 10) {
return true;
} else {
int highLength = 1;
//获取 x 的最高位数量级,如 x=123,highLength=100,x=23451,highLength=10000...
while ((x / highLength) >= 10) {
highLength = highLength * 10;
}
int lowLength = 10;
//(x / highLength) % 10 取待比较数的最高位数
//(x % lowLength) / (lowLength / 10) 取待比较数的最低位
while ((x / highLength) % 10 == (x % lowLength) / (lowLength / 10)) {
if (highLength < lowLength) {
return true;
}
//相等时,最高位左移,最低位右移
lowLength = lowLength * 10;
highLength = highLength / 10;
if (highLength < lowLength) {
return true;
}
}
return false;
}
}
  • Kotlin 语言实现
    fun isPalindrome(x: Int): Boolean {
if (x < 0)
return false
if (x < 10)
return true
var highLength = 1
var lowLength = 10
while (x / highLength >= 10) {
highLength *= 10
} while (x / highLength % 10 == x % lowLength / (lowLength / 10)) {
if (highLength < lowLength) return true
highLength /= 10
lowLength *= 10
if (highLength < lowLength) return true
}
return false
}

13 给定一个罗马数字,将其转换成整数

  • 1.对应罗马——整数的转换关系:I(1),V(5),X(10),L(50),C(100),D(500),M(1000)
  • 2.规则:
    • 2.1:相同的数字连写, 所表示的数等于这些数字相加得到的数。如 XXX表示 30;
    • 2.2:小的数字在大的数字的右边, 所表示的数等于这些数字相加得到的数 如VIII 表示8;
    • 2.3:小的数字(限于I, X, C)在大的数字的左边, 所表示的数等于大数减去小的数: 如IV 表示4;
    • 2.4:在一个数的上面画一条横线, 表示这个数增值1000倍(由于题目只考虑4000以内的数,所以这条规则不用考虑);
  • 3.组数规则:
    • 3.1:I, X, C: 最多只能连用3个, 如果放在大数的左边,只能用1个;
    • 3.2:V, L, D: 不能放在大数的左边,只能使用一个;
    • 3.3:I 只能用在V和X的左边。 IV表示4, IX表示9;
    • 3.4:X只能放在L,C左边。 XL 表示40, XC表示90;
    • 3.5:C只能用在D, M左边。 CD 表示400, CM表示900
  • Java 语言实现
    public int romanToInt(String s) {
if (s.length() == 0) {
return 0;
}
int sum = 0;
for (int i = 0; i < s.length() - 1; i++) {
if (singleRomanToInt(s.charAt(i)) >= singleRomanToInt(s.charAt(i + 1))) {
sum += singleRomanToInt(s.charAt(i));
} else {
sum -= singleRomanToInt(s.charAt(i));
}
}
sum += singleRomanToInt(s.charAt(s.length() - 1));
return sum;
} private int singleRomanToInt(char c) {
switch (c) {
case 'I':
return 1;
case 'V':
return 5;
case 'X':
return 10;
case 'L':
return 50;
case 'C':
return 100;
case 'D':
return 500;
case 'M':
return 1000;
default:
return 0;
}
}
  • Kotlin 语言实现
    fun romanToInt(s: String): Int {
if (s.isEmpty()) {
return 0
}
var sum = 0
for (i in 0 until s.lastIndex) {
if (singleRomanToInt(s[i]) >= singleRomanToInt(s[i + 1]))
sum += singleRomanToInt(s[i])
else
sum -= singleRomanToInt(s[i])
}
sum += singleRomanToInt(s[s.lastIndex])
return sum
} private fun singleRomanToInt(char: Char): Int {
if ('I' == char) return 1
if ('V' == char) return 5
if ('X' == char) return 10
if ('L' == char) return 50
if ('C' == char) return 100
if ('D' == char) return 500
if ('M' == char) return 1000
return 0
}

使用Java+Kotlin双语言的LeetCode刷题之路(二)的更多相关文章

  1. 使用Java+Kotlin双语言的LeetCode刷题之路(三)

    BasedLeetCode LeetCode learning records based on Java,Kotlin,Python...Github 地址 序号对应 LeetCode 中题目序号 ...

  2. 使用Java+Kotlin双语言的LeetCode刷题之路(一)

    LeetCode learning records based on Java,Kotlin,Python...Github 地址 序号对应 LeetCode 中题目序号 1 两数之和 给定一个整数数 ...

  3. LeetCode刷题预备知识(二)

    Python四大数据结构的属性及方法 在LeetCode刷题预备知识一中我们掌握了常见的内置函数,和四大数据结构的基本概念: 但只掌握这些还远远不够,我们还需了解四大数据结构的属性及方法才能更高效快速 ...

  4. #leetcode刷题之路28-实现 strStr() 函数

    实现 strStr() 函数.给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返回 ...

  5. python -- leetcode 刷题之路

    第一题 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], tar ...

  6. #leetcode刷题之路3-无重复字符的最长子串

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc" ...

  7. leetcode 刷题之路 64 Construct Binary Tree from Inorder and Postorder Traversal

    Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assume tha ...

  8. #leetcode刷题之路50-Pow(x, n)

    实现 pow(x, n) ,即计算 x 的 n 次幂函数.示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100 #inclu ...

  9. #leetcode刷题之路49-字母异位词分组

    给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串.示例:输入: ["eat", "tea", "tan" ...

随机推荐

  1. 1.1 机中容量单位B、KB、MB、GB和TB的关系

    字节(Byte,简称B)与K.KB.M.MB的关系 1.计算机中各种存储容量的单位都是用字节(Byte简为B)来表示,此外还有KB.MB.GB和TB,他们的关系是: 1KB=1024Bytes=2的1 ...

  2. ModelForm 中选择框的数据 以及 instance 参数

    ModelForm 中选择框的数据 print(list(self.fields['customer'].choices)) # [('', '---------'), (1, '张飞'), (2, ...

  3. A - I Think I Need a Houseboat HDU - 1065(水题)

    题意:给你一个半圆,半圆以面积每年增加50平方英里的速度扩张.问(x, y)在多少年后被覆盖. 思路:emmm,其实最开始,还是打表的,因为每一年的半圆的半径可以算出来.啊啊啊啊,其实这个方法是可以的 ...

  4. PHP开发小技巧③—实现多维数组转化为一维数组

    在平常的项目开发中我们多会用到让多维数组转化为一维数组的情况,但是很多Programmer不会将其进行转化,也有些没有想到很好的算法然后经过乱起八糟的运算方式将其勉强转化好,但是所写的程序代码冗余非常 ...

  5. day14 Python集合关系运算交,差,并集

    low逼写法,没用集合 python_1 = ['charon','pluto','ran'] linux_1 = ['ran','xuexue','ting'] python_and_linux = ...

  6. source 和sh 区别

    sh新建一个子shell进程,变量在主shell中无法获取 source在当前shell中执行脚本,变量在主shell即当前shell中可以获取 例子: 1.新建一个test.sh脚本,内容为:A=1 ...

  7. centos6安装tomcat8.5

    //参考https://www.cnblogs.com/xdp-gacl/p/4097608.html [root@192 ~]# mount /dev/sr0 /mnt/usb1[root@192 ...

  8. linux问题总结

    编写后台进程的管理脚本,使用service deamon-name stop的时候,出现如下提示:/sbin/service: line 66: 23299 Terminated env -i LAN ...

  9. Objective-C 基于Aspects

    JavaScriptCore没有禁,因为各种小程序都在用 网络下载文件没有禁

  10. Android学习之基础知识十三 — 四大组件之服务详解第二讲(完整版的下载示例)

    上一讲学习了很多关于服务的使用技巧,但是当在真正的项目里需要用到服务的时候,可能还会有一些棘手的问题让你不知所措.接下来就来综合运用一下,尝试实现一下在服务中经常会使用到的功能——下载. 在这一讲我们 ...