`

Fibonacci数列计算+找出出现次数最多字符+不同数字的排列组合

阅读更多
1,斐波拉契数列的计算
package chapter9;

import java.util.Scanner;

public class Fibonacci {

	private static int k=0;
	public static void main(String[] args) { //递归求菲波那契数列,f1=1,f2=1

		Scanner ci = new Scanner(System.in);
		long a = ci.nextLong();
		System.out.println(fibonacci(a));
		System.out.println("共调用了"+k+"次");
		
		
	}
	private static long fibonacci(long a) {
		if(a==0||a==1) {
			k++;
			return a;
		}
		else return fibonacci(a-1)+fibonacci(a-2);
	}

}

2,找出一个字符串中出现次数最多的字符
package chapter9;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.TreeSet;

public class FindMaxAppear {// 求一个字符串中出现次数最多的那个字母及次数

	public static void main(String[] args) {
		String input = "abcabbbbbbkgllllslll";
		doString(input);

		
		//方法二:简单易行
		char[] a= input.toCharArray();
		int[] count = new int[127]; //ASCII码字符最多为127个
		for(int i=0;i<a.length;i++){
			count[a[i]]++; //字符为a[i]的出现次数++
		}
		
		//找出count中最大值,如果有多个就算多个
		int maxCount = 0;
		char maxValue;//出现次数最多的字符
		StringBuffer sb = new StringBuffer();
		for(int i=0;i<count.length;i++){
			if(count[i]>maxCount)maxCount=count[i];
		}
		
		for(int i=0;i<count.length;i++){
			if(count[i]==maxCount){
				maxValue = (char) i;
				sb.append(maxValue+",");
			}
		}
		System.out.println("出现次数最多的字符有:"+sb+"出现次数为:"+maxCount);
	//方法二
		
	}

	private static void doString(String input) {

		char[] chars = input.toCharArray();
		List<String> list = new ArrayList<String>();

		TreeSet<String> set = new TreeSet<String>(); // 对插入到的元素进行自然排序

		for (int i = 0; i < chars.length; i++) {
			list.add(String.valueOf(chars[i]));
			set.add(String.valueOf(chars[i])); // 添加了字母,而且没有重复的。

		}

		Collections.sort(list);// 对list进行排序
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < list.size(); i++) {
			sb.append(list.get(i));
		}
		input = sb.toString();// input已经是排好序的
		int max = 0; // 字符数最多的个数
		String maxString = "";

		List<String> maxList = new ArrayList<String>(); // 字符数最多的可能有多个,如同时有4个a和b,而且最多
		Iterator<String> it = set.iterator();
		while (it.hasNext()) {
			String current = it.next();
			int begin = input.indexOf(current);
			int end = input.lastIndexOf(current);
			int value = end - begin + 1; // 字符current出现过value次
			if (value > max) {
				max = value;
				maxString = current;
				maxList.add(current); 
			} else if (value == max) {
				maxList.add(current);
			}
		}

		// while循环结束后,maxString存放的就是出现次数最多的字符,max为出现最多的次数

		int index = 0;
		for (int i = 0; i < maxList.size(); i++) { //找到maxString的下标,则maxList之后添加的可能是maxString,之前肯定不是出现次数最多的,否则
			if (maxList.get(i).equals(maxString)) {
				index = i;
				break;
			}
		}

		System.out.println("出现最多的字符分别为:");
		for (int i = index; i < maxList.size(); i++) {
			System.out.println(maxList.get(i) + " ");
		}
		System.out.println();
		System.out.println("出现最多的次数为:" + max);
	}
}

3,输出一个数字字符串的组合,数字无重复情况
package chapter9;

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

public class ListAllNum { //列出数组中的所有数的组合,前提是没有重复数字

	public static void main(String[] args) {

		
		String[] str = {"1","2","3","4"};
		listAll(Arrays.asList(str),"");
	}

	private static void listAll(List<String> asList, String prefix) {
		System.out.println(prefix);
		
		for(int i=0;i<asList.size();i++){
			List<String> temp = new LinkedList(asList);//构造包含asList中元素的链表
			listAll(temp,prefix+temp.remove(i));
			
			
		}
	}

}
分享到:
评论

相关推荐

    全国计算机等级考试三级上机试题【南开100题】

    - 找出得票最多的候选人。 2. **Fibonacci数列问题**: - **基本概念**:Fibonacci数列是一个递增序列,其中每一项都是前两项之和。 - **解题思路**: - 实现一个函数用于生成Fibonacci数列。 - 根据题目要求...

    《剑指Offer》题目及代码.pdf

    40. 数组中只出现一次的两个数,而其他数都出现两次:可以考虑使用异或运算的性质来找出成对的数字,然后通过异或运算找出只出现一次的数字。 41. 和为s的连续整数序列:可以使用滑动窗口的方法,维护一个窗口区间...

    算法与程序实践1&#40;简单计算&#41;.doc

    斐波那契数列是一个数列,其中每个数字是前两个数字的和。通常以0和1开始,之后的每一项都是前两项之和。例如:0, 1, 1, 2, 3, 5, 8, 13...。这个练习要求编写一个程序来生成指定数量的斐波那契数。 2. **CS2:正...

    编程算法练习--没事的时候练练

    - **描述**:斐波那契数列是一系列数字,其中每个数字是前两个数字的和,通常从1和1开始。 - **实现思路**: - 使用循环或递归方法来生成数列。 - 循环方法:初始化前两个数字为1,然后通过循环计算后续数字。 - ...

    前端大厂最新面试题-math.docx

    6. **重新排序得到 2 的幂**:这可能需要对位运算和数论的理解,找出如何通过重新排列数组元素得到一个2的幂。 7. **两数相加**:基础的算术操作,可能涉及大整数加法,尤其是在处理大数据时。 8. **最小好进制**...

    经典算法(C语言)包含51个经典算法的C语言实现

    2. **斐波那契数列(Fibonacci Sequence)**:斐波那契数列中的每个数字是前两个数字的和,可以使用递归或动态规划方法实现。 3. **巴斯卡三角形(Pascal's Triangle)**:生成每个位置的数字等于其上方两数字之和,...

    2009算法考试试题

    例如,给定的递归时间函数T(n),需要找出其阶(n的最高次幂)以确定时间复杂度。 3. **单循环赛日程安排**:这是组合优化问题的一个实例,涉及排列和组合的概念。对于n个运动员的单循环赛,需要构造一个满足条件的...

    数据结构与算法题解

    - 找出数组中只出现一次的数字的进阶版。 - **SingleNumberIII** - 找出数组中只出现一次的两个数字。 - **O1CheckPowerof2** - 检查一个数是否为2的幂。 - **ConvertIntegerAtoIntegerB** - 转换两个整数。 - *...

    ACM所需小知识

    - **Fibonacci数列**:斐波那契数列的定义及性质。 - **Catalan数列**:卡特兰数列的定义及应用。 - **Stirling数**:斯特林数第一类和第二类。 - **差分序列**:求解差分方程的方法。 - **生成函数**:通过函数形式...

    labuladong的刷题笔记V1.7(力扣版)

    - **字符串异位词**:如567题,通过动态规划找出字符串的排列。 7. **回溯算法**: - **N皇后问题**:48题,使用回溯法找到N个皇后放置的所有可能性。 - **括号生成**:22题,通过回溯找到所有有效的括号组合。 ...

    数据结构与算法:链表、二叉树、并查集、图、排序算法、贪心算法、动态规划、单调栈、KMP等.zip

    它常用于解决求区间最大值/最小值、找出每个元素左侧/右侧第一个比其大的/小的元素等问题。 9. **KMP算法**:KMP(Knuth-Morris-Pratt)是一种字符串匹配算法,能够在主串中高效地查找模式串出现的位置,避免了不必...

    数据结构1800题和答案.rar

    12. **动态规划**:解决具有重叠子问题和最优子结构的问题,如斐波那契数列、背包问题等。 13. **贪心算法**:每一步选择当前最优解,但不保证全局最优,如霍夫曼编码、Prim算法等。 14. **图论算法**:包括最短路径...

    数据结构与算法(Java版)

    - **线性齐次递推式的求解:** 如斐波那契数列。 - **非齐次递推关系的解:** 包含额外项的递推关系。 4. **Master Method:** 一种用于分析递归算法时间复杂度的方法,特别适用于分治法相关的算法。 5. **分治...

    java数据结构与算法

    - 例如,计算斐波那契数列。 **5.3 递推关系求解** - **求解递推关系的常用方法** - 特征根法、迭代法、母函数法等。 - 用于求解线性递推关系式。 - **线性齐次递推式的求解** - 递推式不含独立项的情况。 - ...

Global site tag (gtag.js) - Google Analytics