几个简答的java算法面试题

package 二进制整数1的个数;

public class Test {
	
	public static void main(String[] args) {
		
		
		int i =13;
		int count =0;
		int flag = 1;
		while(flag<=i) {
			if((flag&i)!=0)
				count++;
			flag=flag<<1;
		}
		System.out.println(count);
		
	}

}
package 求素数;

public class Tset {

	public static void main(String[] args) {
		// TODO Auto-generated method stub	
		int i , j;
		for(i = 1; i<= 100 ;i++) {

			for(j=2;j<i;j++) {
				
				if(i%j==0) {

					break;
				}
			}
			if(j>=i) {
				System.out.println(i);
			}
		}
	}

}

走楼梯问题:

只能1或2阶

package 上楼梯问题;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		System.out.println(upLou(8));
		

	}
	public static int upLou(int n ) {
		
		if(n<=1) {
			return 1;
		}
		if(n>1) {
			return upLou(n-1)+upLou(n-2);
		}
		return 999;
		
		
	}

}

1.2.3.阶

/*
 * To change this template, choose Tools | Templates and open the template in
 * the editor.
 */
package com.csdn.question;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * Description: 一个人爬楼梯,一步可以迈一级,二级,三级台阶,如果楼梯有N级,编写程序,输出所有走法。java实现。
 * Thinking: 先试探性的走出第一步,在第一步的基础上递归处理剩下的台阶数,直到最后走出一棵树,然后遍历树,打印出路径
 * @author karl
 */
public class ClimbStairs_ThunderSubject {
     
     
    public static final int step_1 = 1; //一步一级
    public static final int step_2 = 2; //一步二级
    public static final int step_3 = 3; //一步三级
     
    /**
     * Description: 开始走楼梯,即创建基于根节点root的树
     * @param root 根节点
     * @param n 楼梯级数
     */
    public static void climbStaris_CreateTree( Node root ,int n){
        if( n == 1 ){   //若台阶数为1,则只能走一步一级
            Node step = new Node(step_1);
            root.children.add(step);
        }else if( n == 2 ){ //若台阶数为2,第一步可以走一级,也可以走两阶,用for循环处理
            for( int i=1; i<=2; i++ ){
                Node step = new Node(i);
                root.children.add(step);
                 
                //走完第一步,剩下的台阶数递归处理
                int left = n - i;
                climbStaris_CreateTree(step,left);
            }
        }else if( n >= 3 ){ //做台阶数大于等于3,则第一步有三种走法,一级,二级,或三级,for循环处理
            for( int i=1; i<=3; i++){
                Node step = new Node(i);
                root.children.add(step);
                 
                //走完第一步,剩下的台阶数递归处理
                int left = n - i;
                climbStaris_CreateTree(step,left);
            }
        }
         
         
    }
    
     
    /**
     * Description: 打印楼梯的走法,即遍历整个树
     * @param root 需要遍历的父节点
     * @param rootPath 需要遍历的父节点相对于树根节点的路径
     */
    public static void printPath_ergodicTree( Node root, String rootPath){
        //若传入的父节点即为叶子几点,则直接打印其路径,完毕后回,遍历下一个节点
        if( root.children.size() == 0 ){
            System.out.println(rootPath);
            return;
        }
         
        // 做传入的父节点有子节点,则递归遍历其子节点
        for( int i=0; i<root.children.size(); i++ ){
            Node child = root.children.get(i);
            String childPath = rootPath+"-"+String.valueOf(child.val);
             
            //递归处理其子节点
            printPath_ergodicTree(child,childPath);
        }
         
    }
     
     
    public static void main(String[] args){
        Node root = new Node();
        climbStaris_CreateTree(root,4);
        printPath_ergodicTree(root,"start");
    }
     
}
 
 
/**
 * Description: 定义树的节点
 * @author karl
 */
 
class Node{
     
    int val;
    List<Node> children = new ArrayList<Node>();
     
    Node(){}
    Node( int val ){
        this.val = val;
    }
         
 
     
}

猜你喜欢

转载自blog.csdn.net/dear_mango/article/details/80341718