算法练习LeetCode初级算法之数学
- Fizz Buzz- class Solution { - public List<String> fizzBuzz(int n) { - List<String> list=new LinkedList<>(); - for (int i = 1; i <=n; i++) { - if (i%3==0&&i%5==0) { - list.add("FizzBuzz"); - continue; - }else if (i%3==0) { - list.add("Fizz"); - continue; - }else if (i%5==0) { - list.add("Buzz"); - continue; - } - list.add(String.valueOf(i)); - } - return list; - } - } 
- 计数质数
- 很快的方法- class Solution { - public int countPrimes(int n) { - if (n<3) { - return 0; - } - int res=0; - boolean[] notPrime=new boolean[n];//默认都为false - for (int i = 2; i < n; i++) { - if (!notPrime[i]) { - res++; - for (int j = 2; i*j < n; j++) { - notPrime[i*j]=true; - } - } - } - return res; - } - } 
- 我的解法:耗时间- class Solution { - public int countPrimes(int n) { - if (n==0||n==1||n==2) { - return 0; - } - int res=0; - for (int i = 2; i < n; i++) { - boolean isPrimes=true; - for (int j = 2; j <=Math.sqrt(i); j++) { - if (i%j==0) { - isPrimes=false; - break; - } - } - if (isPrimes) { - res++; - } - } - return res; - } - } 
- 3的幂
在解这道题的时候。首先要明确地将整数划分为两大部分,即小于等于零(此时没有幂,log x 其中x>0)
和大于零的部分;
在大于零的部分又可以划分为1和不能被3整除(则不是3的幂次方)和能被3整除的!
- 递归法- class Solution { - public boolean isPowerOfThree(int n) { - if (n==0) { - return false; - }else if (n==1) { - return true; - }else if (n%3==0) { - return isPowerOfThree(n/3); - }else { - return false; - } - } - } 
- 循环法- class Solution { - public boolean isPowerOfThree(int n) { - if (n<1) { - return false; - } - while (n!=1) { - if (n%3!=0) { - return false; - }else { - n/=3; - } - } - return true; - } - } 
- 数学方法log10- class Solution { - public boolean isPowerOfThree(int n) { - if (n<1) { - return false; - } - double d=Math.log10(n)/Math.log10(3); - return (d-(int)d)==0?true:false; - } - } 
- 罗马数字转整数
- 我的解法:- 有点暴力,虽然代码很多,但很好理解,写出这么长的代码我确实好菜!!! - 因为没看清题目,人家都说了这六种特殊情况是因为小的在大的左边 蠢到家!! - class Solution { - public int romanToInt(String s) { - int res=0; - char[] cs=s.toCharArray(); - int len=cs.length; - int i=len-1; - int f=len-2; - StringBuffer st=new StringBuffer(); - StringBuffer sp=new StringBuffer(); - //现将特殊和单个分为两个数组 - while (i>=0||f>=0) { - try { - if (cs[i]=='V'&&cs[f]=='I') {//1 - st.append(cs[f]); - st.append(cs[i]); - i-=2; - f-=2; - }else if (cs[i]=='X'&&cs[f]=='I') {//2 - st.append(cs[f]); - st.append(cs[i]); - i-=2; - f-=2; - }else if (cs[i]=='L'&&cs[f]=='X') {//3 - st.append(cs[f]); - st.append(cs[i]); - i-=2; - f-=2; - }else if (cs[i]=='C'&&cs[f]=='X') {//4 - st.append(cs[f]); - st.append(cs[i]); - i-=2; - f-=2; - }else if (cs[i]=='D'&&cs[f]=='C') {//5 - st.append(cs[f]); - st.append(cs[i]); - i-=2; - f-=2; - }else if (cs[i]=='M'&&cs[f]=='C') {//6 - st.append(cs[f]); - st.append(cs[i]); - i-=2; - f-=2; - } - else if (cs[i]=='I') { - sp.append(cs[i]); - i--; - f--; - }else if (cs[i]=='V') { - sp.append(cs[i]); - i--; - f--; - }else if (cs[i]=='X') { - sp.append(cs[i]); - i--; - f--; - }else if (cs[i]=='L') { - sp.append(cs[i]); - i--; - f--; - }else if (cs[i]=='C') { - sp.append(cs[i]); - i--; - f--; - }else if (cs[i]=='D') { - sp.append(cs[i]); - i--; - f--; - }else if (cs[i]=='M') { - sp.append(cs[i]); - i--; - f--; - } - } catch (Exception e) {//这里还越界,通过抛出异常处理 - // TODO: handle exception - sp.append(cs[i]); - i--; - } - } - char[] st1=st.toString().toCharArray(); - char[] sp1=sp.toString().toCharArray(); - int lenst=st1.length; - int i1=lenst-1; - int f1=lenst-2; - //对特殊数组取值 - while (i1>=0||f1>=0) { - if (st1[i1]=='V'&&st1[f1]=='I') {//1 - res+=4; - i1-=2; - f1-=2; - }else if (st1[i1]=='X'&&st1[f1]=='I') {//2 - res+=9; - i1-=2; - f1-=2; - }else if (st1[i1]=='L'&&st1[f1]=='X') {//3 - res+=40; - i1-=2; - f1-=2; - }else if (st1[i1]=='C'&&st1[f1]=='X') {//4 - res+=90; - i1-=2; - f1-=2; - }else if (st1[i1]=='D'&&st1[f1]=='C') {//5 - res+=400; - i1-=2; - f1-=2; - }else if (st1[i1]=='M'&&st1[f1]=='C') {//6 - res+=900; - i1-=2; - f1-=2; - } - } - int lensp=sp1.length; - int i2=lensp-1; - //对单个数组取值 - while (i2>=0) { - if (sp1[i2]=='I') { - res+=1; - i2--; - }else if (sp1[i2]=='V') { - res+=5; - i2--; - }else if (sp1[i2]=='X') { - res+=10; - i2--; - }else if (sp1[i2]=='L') { - res+=50; - i2--; - }else if (sp1[i2]=='C') { - res+=100; - i2--; - }else if (sp1[i2]=='D') { - res+=500; - i2--; - }else if (sp1[i2]=='M') { - res+=1000; - i2--; - } - } - return res; - } - } 
- 大神解法:利用map,挺好!- class Solution { - public int romanToInt(String s) { - Map<Character, Integer> hashMap = new HashMap<>(); - // I 1 - // V 5 - // X 10 - // L 50 - // C 100 - // D 500 - // M 1000 - hashMap.put('I', 1); - hashMap.put('V', 5); - hashMap.put('X', 10); - hashMap.put('L', 50); - hashMap.put('C', 100); - hashMap.put('D', 500); - hashMap.put('M', 1000); - int sum=0; - char[] cs=s.toCharArray(); - for (int i = cs.length-1; i>=0; i--) { - //处理六种特殊情况,即大的在右,小的在左 - if ((i-1)>=0&&hashMap.get(cs[i])>hashMap.get(cs[i-1])) { - sum+=hashMap.get(cs[i])-hashMap.get(cs[i-1]); - i--; - }else { - //处理单个的情况 - sum+=hashMap.get(cs[i]); - } - } - return sum; - } - } 
算法练习LeetCode初级算法之数学的更多相关文章
- 【LeetCode算法】LeetCode初级算法——字符串
		在LeetCode初级算法的字符串专题中,共给出了九道题目,分别为:反转字符串,整数反转,字符串中的第一个唯一字符,有效的字母异位词,验证回文字符串,字符串转换整数,实现strStr(),报数,最 ... 
- 算法练习LeetCode初级算法之链表
		删除链表中的节点 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode ne ... 
- 算法练习LeetCode初级算法之字符串
		反转字符串 我的解法比较low,利用集合的工具类Collections.reverse反转,用时过长 class Solution { public void reverseString(char[] ... 
- 算法练习LeetCode初级算法之数组
		删除数组中的重复项 官方解答: 旋转数组 存在重复元素 只出现一次的数 官方解答: 同一个字符进行两次异或运算就会回到原来的值 两个数组的交集 II import java.util.Arr ... 
- 算法练习LeetCode初级算法之其他
		位1的个数 解法一: class Solution { // you need to treat n as an unsigned value public int hammingWeight(int ... 
- 算法练习LeetCode初级算法之设计问题
		打乱数组 不断的让第一个与后面随机选择的数交换 class Solution { private int[] nums; private int[] initnums; public Solution ... 
- 算法练习LeetCode初级算法之动态规划
		爬楼梯:斐波那契数列 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 非递归解法 class S ... 
- 算法练习LeetCode初级算法之排序和搜索
		合并两个有序数组 class Solution { public void merge(int[] nums1, int m, int[] nums2, int n) { System.arrayco ... 
- 算法练习LeetCode初级算法之树
		二叉树的前序遍历 我的解法:利用递归,自底向下逐步添加到list,返回最终的前序遍历list class Solution { public List<Integer> preorderT ... 
随机推荐
- windows2012 IIS部署GeoTrust证书踩过的坑。 视频测试可用  IIS 证书导入
			证书导入方式 https://wenku.baidu.com/view/3504f29a55270722192ef78a.html https://www.cnblogs.com/jackrebel/ ... 
- Linux下搭建jmeter
			最近做性能测试,Windows下跑jmeter,并发跑不到100,CPU就100%,这还是在命令行模式下,真心头大.没办法,只好搞个Linux来跑了,下面说下如何玩转的. 1.下载Ubuntu操作系统 ... 
- 《深度探索C++对象模型》读书笔记(一)
			前言 今年中下旬就要找工作了,我计划从现在就开始准备一些面试中会问到的基础知识,包括C++.操作系统.计算机网络.算法和数据结构等.C++就先从这本<深度探索C++对象模型>开始.不同于& ... 
- 通过jedis远程访问redis服务器
			一.jedis简介 类似于mysql数据库,一般开发都需要通过代码去访问redis服务器,对于主流的开发语言,redis提供了访问的客户端接口. https://redis.io/clients 而对 ... 
- new words
			Your cooperation is greatly appreciated 感谢您的合作! budget 预算 
- java中抽象类是否可以继承实体类?
			一道java 常见面试题,网上找到的几乎每个 java 面试笔试题大全或集锦里都能找到这道题. 题目如下:问: 抽象类是否可继承实体类 (concrete class) 答: 抽象类是可以继承实体类, ... 
- [STM32F103]串口UART配置
			l 串口时钟使能,GPIO时钟使能: RCC_APB2PeriphClockCmd(); l 串口复位: USART_DeInit(); 这一步不是必须的 l GPIO端口模式设置: GPIO_Ini ... 
- CSS ——padding
			css样式中使用padding(内边距)会将盒子撑开? 解决办法:在样式中添加box-sizing:border-box; 
- PHP原生写的生成图片缩略图类
			PHP原生写的生成图片缩略图类,本文以京东商品图片为例,分别生成三种不同尺寸的图片.调用方法很简单只要传参数高度和宽度,及新图片的名称. 引入缩略图类 include_once 'ImageResiz ... 
- Kafka(3)--kafka消息的存储及Partition副本原理
			消息的存储原理: 消息的文件存储机制: 前面我们知道了一个 topic 的多个 partition 在物理磁盘上的保存路径,那么我们再来分析日志的存储方式.通过 [root@localhost ~]# ... 
