11.输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
a)使用Integer.toBinaryString(n);来计算得出二进制的字符串,然后使用for循环截取字符串是否为1
public class Solution {
public int NumberOf1(int n) {
String res = new String();
//这里定义一个变量用来计算二进制数中的1的个数
int i=0;
res = Integer.toBinaryString(n);
//判断二进制的字符串中的是不是为1
for(int j = 0; j<res.length(); j++){
String s = new String();
if(s.equals("1")){
i++;
}
}
return i;
}
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.NumberOf1(5));
}
}
12.给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
a)这里有一种很简单的方法,就是直接调用Math的Math.pow(base, exponent);方法。
public class Solution {
public double Power(double base, int exponent) {
return Math.pow(base, exponent);
}
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.Power(5,5));
}
}
b)还有一种方法就是自己使用Java来实现跟Math.pow(base, exponent);方法一样的功能。
public class Solution {
public double Power(double base, int exponent) {
double sum = 1;
if(exponent == 0){
sum = 1;
}else if(exponent > 0){
for(int i = 0; i < exponent; i++){
sum = sum * base;
}
}else if(exponent < 0){
int flag = -exponent;
for(int i = 0; i < flag; i++){
sum = sum * base;
}
sum = 1/sum;
}
return sum;
}
public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.Power(5,-1));
}
}
13.输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
a)这里首先new一个长度和输入的数组长度相同的数组,然后遍历数组进行判断。
public class Solution {
public void reOrderArray(int[] array) {
int len = array.length;
int j=0;
int[] arr1 = new int[len];
for (int i = 0; i < len; i++) {
if(array[i] % 2 != 0){
arr1[j] = array[i];
j++;
}
}
for(int i = 0;i < len; i++){
if(array[i] % 2 == 0){
arr1[j] = array[i];
j++;
}
}
for(int i = 0; i < len; i++){
array[i] = arr1[i];
System.out.print(array[i]);
}
}
public static void main(String[] args) {
Solution s = new Solution();
s.reOrderArray(new int[]{1,4,2,3,5,6,8});
}
}
14.输入一个链表,输出该链表中倒数第k个结点。
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
ListNode pre=null,p=null;
//两个指针都指向头结点
p=head;
pre=head;
//记录k值
int a=k;
//记录节点的个数
int count=0;
//p指针先跑,并且记录节点数,当p指针跑了k-1个节点后,pre //指针开始跑,
//当p指针跑到最后时,pre所指指针就是倒数第k个节点
while(p!=null){
p=p.next;
count++;
if(k<1){
pre=pre.next;
}
k--;
}
//如果节点个数小于所求的倒数第k个节点,则返回空
if(count<a) return null;
return pre;
}
}
15.输入一个链表,反转链表后,输出链表的所有元素。
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head==null)
return null;
ListNode newHead = null;
ListNode pNode = head;
ListNode pPrev = null;
while(pNode!=null){
ListNode pNext = pNode.next;
if(pNext==null)
newHead = pNode;
pNode.next = pPrev;
pPrev = pNode;
pNode = pNext;
}
return newHead;
}
}